ďťż
 
[mssql] zapytanie z grupowaniem ďťż
 
[mssql] zapytanie z grupowaniem
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[mssql] zapytanie z grupowaniem



aaawro - 09-09-2007 00:04
[mssql] zapytanie z grupowaniem
  Witam.
Robię coś na kształt bazy pomysłów. Użytkownicy mogą dodawać swoje pomysły,
edytować je. Później są one opiniowane przez użytkowników wyższych rangą.
Rzecz w tym, że każda edycja tego pomysłu musi być zapisywana.
I tak mam tabelę:

T: Pomysly
a- pomysl_id
b- watek_id
c - numer_edycji
d- <dużo innych atrybutów>...

a | b | |c | d..
1 1 1
2 1 2
3 1 3
4 2 1

I teraz jak wyciągnąć wszystkie pomysły które są ostatnimi wersjami tych
pomysłów? Coś w stylu dla każego 'b' tam gdzie jest największa wartość w 'c' ?
dzięki z góry za jakieś naprowadzenie.
Miłosz

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/





Sylwester Lewandowski - 09-09-2007 00:04

  Hej,

Może:

SELECT P1.a,P1.b,P1.c,P1.d
FROM Pomysly P1
WHERE c = (SELECT MAX(c)
FROM Pomysly P2
WHERE P1.a=P2.a)

Zakładam, że kolejne wersje tego samego pomysłu
mają takie samo pomysl_id i zwiększany jest numer edycji z kolejną edycją.

Pozdr.

aaawro pisze:
> Witam.
> Robię coś na kształt bazy pomysłów. Użytkownicy mogą dodawać swoje pomysły,
> edytować je. Później są one opiniowane przez użytkowników wyższych rangą.
> Rzecz w tym, że każda edycja tego pomysłu musi być zapisywana.
> I tak mam tabelę:
>
> T: Pomysly
> a- pomysl_id
> b- watek_id
> c - numer_edycji
> d- <dużo innych atrybutów>...
>
> a | b | |c | d..
> 1 1 1
> 2 1 2
> 3 1 3
> 4 2 1
>
>
> I teraz jak wyciągnąć wszystkie pomysły które są ostatnimi wersjami tych
> pomysłów? Coś w stylu dla każego 'b' tam gdzie jest największa wartość w 'c' ?
> dzięki z góry za jakieś naprowadzenie.
> Miłosz
>
>




=?ISO-8859-2?Q?Adam_P=B3aszczyca?= - 09-09-2007 00:04

  On Sat, 8 Sep 2007 08:42:58 +0000 (UTC), " aaawro"
<aaawro@gazeta.SKASUJ-TO.pl> wrote:

>T: Pomysly
>a- pomysl_id
>b- watek_id
>c - numer_edycji
>d- <dużo innych atrybutów>...
>
>a | b | |c | d..
>1 1 1
>2 1 2
>3 1 3
>4 2 1
>
>
>I teraz jak wyciągnąć wszystkie pomysły które są ostatnimi wersjami tych
>pomysłów? Coś w stylu dla każego 'b' tam gdzie jest największa wartość w 'c' ?

Select pomysl_id, max(numer_edycji) from Pomysly group by pomysl_id;
--
___________ (R)
/_ _______ Adam 'Trzypion' Płaszczyca (+48 502) 122 688
___/ /_ ___ ul. Na Szaniec 23/70 31-560 Kraków (012 378 31 98)
_______/ /_ http://trzypion.oldfield.org.pl/wieliczka/foto.html
___________/ mail: _555@irc.pl GG: 3524356




aaawro - 09-09-2007 00:04

  Testuje to na razie pod MySQLem i pierwsze i drugie rozwiązanie zwraca
wszystkie wiersze. Zamiast tylko te z pomysl_id = 3 lub 4 bo to są ostatnie
wersje. Wątek 1 edytowany 3 raz i na razie ostatni. I wątek 2 edytowany tylko raz.
Chyba że max() pod mssqlem i mysqlem ma inne właściwości.

pozdrawiam,
Miłosz

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/





Sylwester Lewandowski - 09-09-2007 00:38

  Hej,

Czy może pomysl_id to PK w tej tabeli?
Wtedy najprawdopodobniej te zapytania będą działać tak, jak opisałeś.
Założeniem tego co napisałem było, że pomysyl_id jest wspólny dla
kolejnych wersji (a inne kolumny mogą się różnić, dlatego nie było
'prostego' GROUP BY).

Podaj jaki jest PK w tej tabeli i określ, które wartości są wspólne dla
różnych wersji tego samego pomysłu.

Pozdr.

aaawro pisze:
> Testuje to na razie pod MySQLem i pierwsze i drugie rozwiązanie zwraca
> wszystkie wiersze. Zamiast tylko te z pomysl_id = 3 lub 4 bo to są ostatnie
> wersje. Wątek 1 edytowany 3 raz i na razie ostatni. I wątek 2 edytowany tylko raz.
> Chyba że max() pod mssqlem i mysqlem ma inne właściwości.
>
> pozdrawiam,
> Miłosz
>




aaawro - 10-09-2007 00:03

  Sylwester Lewandowski <camlan_remove_@vp.pl> napisał(a):

> Hej,
>
> Czy może pomysl_id to PK w tej tabeli?

Tak to jest PK w tej tabeli. Autonumeracja.

> Podaj jaki jest PK w tej tabeli i określ, które wartości są wspólne dla
> różnych wersji tego samego pomysłu.

watek_id - to jest wspolne dla danego pomyslu.
numer_edycji - to jest numer edycji danego pomyslu

czyli wprowadzam pomysl, - pomysl_id =1, watek_id =1, numer_edycji =1

edytuje pomysl, - pomysl_id =2, watek_id =1 (nie zmienia sie bo to ten sam
pomysl), numer_edycji =2

jeszcze raz edytuje pomysl, - pomysl_id =3, watek_id =1 (nie zmienia sie bo to
ten sam pomysl), numer_edycji =3

dodaje nowy pomysl, - pomysl_id =4, watek_id =2 (zmienia sie bo to ten juz
inny pomysl), numer_edycji =1 (1 edycja)

pozdrawiam,
Miłosz

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/




A.L.E.C - 10-09-2007 00:03

  aaawro pisze:
> Witam.
> Robię coś na kształt bazy pomysłów. Użytkownicy mogą dodawać swoje pomysły,
> edytować je. Później są one opiniowane przez użytkowników wyższych rangą.
> Rzecz w tym, że każda edycja tego pomysłu musi być zapisywana.
> I tak mam tabelę:
>
> T: Pomysly
> a- pomysl_id
> b- watek_id
> c - numer_edycji
> d- <dużo innych atrybutów>...
>
> a | b | |c | d..
> 1 1 1
> 2 1 2
> 3 1 3
> 4 2 1
>
>
> I teraz jak wyciągnąć wszystkie pomysły które są ostatnimi wersjami tych
> pomysłów? Coś w stylu dla każego 'b' tam gdzie jest największa wartość w 'c' ?
> dzięki z góry za jakieś naprowadzenie.
> Miłosz

z opisu wynika, ze w zasadzie kolumna numer_edycji jest zbędna i
poniższe zapytanie wystarczy

SELECT * FROM pomysly
WHERE pomysl_id IN (
SELECT MAX(pomysl_id)
FROM pomysly
GROUP BY watek_id
)

jezeli jednak bylaby istotna to trzeba pokombinować bardziej, w
postgresie użyłbym po prostu DISTINCT ON

--
Aleksander 'A.L.E.C' Machniak http://alec.pl gg:2275252
LAN Management System Developer http://lms.org.pl




Sylwester Lewandowski - 10-09-2007 00:03

  aaawro pisze:
> Sylwester Lewandowski <camlan_remove_@vp.pl> napisał(a):
>
>> Hej,
>>
>> Czy może pomysl_id to PK w tej tabeli?
>
> Tak to jest PK w tej tabeli. Autonumeracja.
>
>> Podaj jaki jest PK w tej tabeli i określ, które wartości są wspólne dla
>> różnych wersji tego samego pomysłu.
>
> watek_id - to jest wspolne dla danego pomyslu.
> numer_edycji - to jest numer edycji danego pomyslu
>

Ok. W takim razie:

SELECT P1.a,P1.b,P1.c,P1.d
FROM Pomysly P1
WHERE P1.c = (SELECT MAX(c)
FROM Pomysly P2
WHERE P1.b=P2.b)
lub

SELECT b, MAX(c)
FROM Pomysly
GROUP BY b

W drugim przypadku, to czy możesz dołączyć "d" zależy od ich zawartości.
Chyba tym razem coś już powinno zaskoczyć.
Pozdr.




aawro - 10-09-2007 00:03

  A.L.E.C <amachniak@onet.pl> napisał(a):

> z opisu wynika, ze w zasadzie kolumna numer_edycji jest zbędna i
> poniższe zapytanie wystarczy
>
> SELECT * FROM pomysly
> WHERE pomysl_id IN (
> SELECT MAX(pomysl_id)
> FROM pomysly
> GROUP BY watek_id
> )

dzięki o to chodziło, dziękuje również Sylwesterowi Lewandowskiemu.
pozdrawiam,
Miłosz

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= =?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?= [ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?= phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?= [MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?= [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?= mecze sie i mecze i nic - zapytanie czesciowe [sql][pgsql] zapytanie sql
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • adwokat.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com