ďťż
 
zapytanie skomplikowane? MSSQL ďťż
 
zapytanie skomplikowane? MSSQL
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

zapytanie skomplikowane? MSSQL



Adam - 15-01-2006 19:16
zapytanie skomplikowane? MSSQL
  Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy
ze mamy tabele w postaci

id ref data cena
1 qwe 2005-12-20 1,1
2 qwe 2005-12-21 1
3 qwe 2005-12-19 2
4 qwe 2006-01-01 3
5 zxc 2006-01-01 1
6 zxc 2006-01-01 4
7 zxc 2006-01-02 7
8 qwe 2006-01-02 9

Chce uzyskac zestawienie przedstawiajace referencja wraz z cena dla
najwczesniejszej daty.
Czyli tabele w postaci

id ref data cena
8 qwe 2006-01-02 9
7 zxc 2006-01-02 7

Baza to mssql

Brakuje mi skladni w postaci
SELECT *
FROM _test
WHERE (id,data) IN
(SELECT id,MAX(data) -- tyle ze w tym miejscu i tak mialbym problem z
pobraniem id bo ponizej mam grupowanie po ref
FROM _test
GROUP BY ref)

Szerze mowiac nie wiem czy to az tak zlozone czy ja juz jestem tak zmeczony
ze szukam nie wiadomo jakiego rozwiazania podczas gdy jest ono trywialne.

Pozdrawiam





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 15-01-2006 19:16

  Adam wrote:
> Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy
> ze mamy tabele w postaci
>
>
> id ref data cena
> 1 qwe 2005-12-20 1,1
> 2 qwe 2005-12-21 1
> 3 qwe 2005-12-19 2
> 4 qwe 2006-01-01 3
> 5 zxc 2006-01-01 1
> 6 zxc 2006-01-01 4
> 7 zxc 2006-01-02 7
> 8 qwe 2006-01-02 9
>
>
> Chce uzyskac zestawienie przedstawiajace referencja wraz z cena dla
> najwczesniejszej daty.
> Czyli tabele w postaci
>
> id ref data cena
> 8 qwe 2006-01-02 9
> 7 zxc 2006-01-02 7
>
>
> Baza to mssql
>
> Brakuje mi skladni w postaci
> SELECT *
> FROM _test
> WHERE (id,data) IN
> (SELECT id,MAX(data) -- tyle ze w tym miejscu i tak mialbym problem z
> pobraniem id bo ponizej mam grupowanie po ref
> FROM _test
> GROUP BY ref)
>
>
> Szerze mowiac nie wiem czy to az tak zlozone czy ja juz jestem tak zmeczony
> ze szukam nie wiadomo jakiego rozwiazania podczas gdy jest ono trywialne.

Problem który występuje raz na tydzień, a ostatni nawet częściej.
Ale przynajmniej sam spróbowałeś i do tego wygląda, że faktycznie jesteś
zmęczony. :)
Grupujesz po ref i po nim masz wyszukiwać, czyli (ref,data) a nie (id,date).
Oczywiście wybierze 2 (albo więcej), jeśli są 2 dla tej samej daty, ale tak już
musi być.

--
P.M.




Adam - 15-01-2006 19:16

  Dnia Thu, 12 Jan 2006 23:50:35 +0100, Paweł Matejski napisał(a):

>> Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy
>> ze mamy tabele w postaci
[cut]
>> Brakuje mi skladni w postaci
>> SELECT *
>> FROM _test
>> WHERE (id,data) IN
>> (SELECT id,MAX(data) -- tyle ze w tym miejscu i tak mialbym problem z
>> pobraniem id bo ponizej mam grupowanie po ref
>> FROM _test
>> GROUP BY ref)
[cut]
> Problem który występuje raz na tydzień, a ostatni nawet częściej.
> Ale przynajmniej sam spróbowałeś i do tego wygląda, że faktycznie jesteś
> zmęczony. :)
> Grupujesz po ref i po nim masz wyszukiwać, czyli (ref,data) a nie (id,date).
> Oczywiście wybierze 2 (albo więcej), jeśli są 2 dla tej samej daty, ale tak już
> musi być.

Napisałem id? a chodziło mi o ref, jednak zmeczenie, poza tym i tak nie
moge w mssql uzyskac skladni where (costam, costam2), dlatego szukam pomocy
tutaj.

Dzieki. Problem pozostaje aktualny.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 15-01-2006 19:17

  Adam wrote:
> Dnia Thu, 12 Jan 2006 23:50:35 +0100, Paweł Matejski napisał(a):
>
>
>>>Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy
>>>ze mamy tabele w postaci
>
> [cut]
>
>>>Brakuje mi skladni w postaci
>>>SELECT *
>>>FROM _test
>>>WHERE (id,data) IN
>>>(SELECT id,MAX(data) -- tyle ze w tym miejscu i tak mialbym problem z
>>>pobraniem id bo ponizej mam grupowanie po ref
>>>FROM _test
>>>GROUP BY ref)
>
> [cut]
>
>>Problem który występuje raz na tydzień, a ostatni nawet częściej.
>>Ale przynajmniej sam spróbowałeś i do tego wygląda, że faktycznie jesteś
>>zmęczony. :)
>>Grupujesz po ref i po nim masz wyszukiwać, czyli (ref,data) a nie (id,date).
>>Oczywiście wybierze 2 (albo więcej), jeśli są 2 dla tej samej daty, ale tak już
>>musi być.
>
> Napisałem id? a chodziło mi o ref, jednak zmeczenie, poza tym i tak nie
> moge w mssql uzyskac skladni where (costam, costam2), dlatego szukam pomocy
> tutaj.

Miałem lepsze zdanie o MSSQL (co wcale nie znaczy, że dobre ;) ).

select t.*
from _test t,
(select ref,max(data) as mdata from _test group by ref) as s
where t.ref = s.ref and t.data = s.mdata

A to zadziała?

--
P.M.





wistocie - 15-01-2006 19:17

 
Użytkownik "Adam" <heaben@can.wait.pl> napisał w wiadomości
news:i2dwdjilgiog$.7gp1csjpqgut.dlg@40tude.net...
> Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy
> ze mamy tabele w postaci
>
>
> id ref data cena
> 1 qwe 2005-12-20 1,1
> 2 qwe 2005-12-21 1
> 3 qwe 2005-12-19 2
> 4 qwe 2006-01-01 3
> 5 zxc 2006-01-01 1
> 6 zxc 2006-01-01 4
> 7 zxc 2006-01-02 7
> 8 qwe 2006-01-02 9
>
>
> Chce uzyskac zestawienie przedstawiajace referencja wraz z cena dla
> najwczesniejszej daty.
> Czyli tabele w postaci
> id ref data cena
> 8 qwe 2006-01-02 9
> 7 zxc 2006-01-02 7

w oracle dziala
mozna tak (tutaj nie polecane)

select a.id,a.ref,a.data,a.cena
from test a, (
select ref,max(data),id
from test
group by ref ) b
where a.id=b.id
order by a.data desc

albo jeszcze prosciej!

select a.id,a.ref,max(a.data) ,a.cena
from test a
group by ref
order by 3 desc

Pozdrawiam




paszczak - 15-01-2006 19:17

  Dnia Fri, 13 Jan 2006 01:04:39 +0100, Paweł Matejski napisał(a):

> Adam wrote:
[cut]
> Miałem lepsze zdanie o MSSQL (co wcale nie znaczy, że dobre ;) ).
>
> select t.*
> from _test t,
> (select ref,max(data) as mdata from _test group by ref) as s
> where t.ref = s.ref and t.data = s.mdata
>
> A to zadziała?

A jak, przeslicznie działa, dzieki wielkie.

Pozdrawiam serdecznie




wistocie - 15-01-2006 19:17

 
Użytkownik "Adam" <heaben@can.wait.pl> napisał w wiadomości
news:i2dwdjilgiog$.7gp1csjpqgut.dlg@40tude.net...
> Witam, mam dzisiaj drobny problem ze złozeniem jednego zapytania. Załozmy>
ze mamy tabele w postaci
>
> Szerze mowiac nie wiem czy to az tak zlozone czy ja juz jestem tak
zmeczony
> ze szukam nie wiadomo jakiego rozwiazania podczas gdy jest ono trywialne.
>
Sorry za zamieszanie.(Moj poprzedni post)
Tutaj male sprostowanie.
Oczywiscie to co wczesniej napisalem, nie na prawa dzialac na oracle
(heh -symulatory), powinno za to na my-sql §:-)
W oracle dziala z funkcja analityczna Rank.
select id, ref, data,cena
from (select id,cena, data, ref, rank () over (partition by ref order by
id desc) u
from _test)
where u = 1
order by data desc
Byc moze w MSSQL jest podobna funkcja analityczna, ktorej tu nalezalo by
uzyc.
Rozwiazanie podane przez P.M
....
select t.*
from _test t,
(select ref,max(data) as mdata from _test group by ref) as s
where t.ref = s.ref and t.data = s.mdata

Jest jak najbardziej poprawne, ale musi spelniac jeszcze zalozenie
1. Data w bazie jest przechowywana w pelnym formacie z godzinami minutami,
(w swoim przykladzie podales format skrocony)
- tak, aby nie zdazyl sie przypadek, kiedy dla jednego ref mamy kilka takich
samych wartosci data
Wtedy mozesz dostac w wyniku

1 qwe 2005-12-20 1,1
2 qwe 2005-12-20 1
3 qwe 2005-12-20 2
5 zxc 2006-01-01 1
6 zxc 2006-01-01 4

Pozdrawiam
  • 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?= [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= mecze sie i mecze i nic - zapytanie czesciowe
  • 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