Tomasz M.

Tomasz M. never go full
retard!

Temat: [MS SQL] Wybranie najmłodszych rekordów

Witam,

Załóżmy, że mamy przykładowa tabelę - w jaki sposób można wybrać rekordy dla id_tow, ale z najpóźniejszą datą, tak by id_tow nie powtarzało się. Można to wykonać w miarę szybkim zapytaniem?


id id_tow datetime
----------- ----------- -----------------------
1 78324 2009-01-26 15:03:00.000
2 90682 2009-01-26 15:47:08.000
3 78323 2009-01-26 15:49:16.000
4 92511 2009-01-26 16:00:37.000
5 92511 2009-01-26 16:00:46.000
6 92511 2009-01-26 16:01:00.000
7 92511 2009-01-26 16:01:26.000
8 92540 2009-01-26 16:03:46.000
9 92494 2009-01-26 16:05:48.000
10 92494 2009-01-26 16:15:00.000
11 90682 2009-01-26 16:05:06.000


Czyli w rezultacie...


id id_tow datetime
----------- ----------- -----------------------
1 78324 2009-01-26 15:03:00.000
3 78323 2009-01-26 15:49:16.000
7 92511 2009-01-26 16:01:26.000
8 92540 2009-01-26 16:03:46.000
10 92494 2009-01-26 16:10:00.000
11 90682 2009-01-26 16:05:06.000


Z góry dzięki za pomoc! ;)Tomasz M. edytował(a) ten post dnia 19.02.09 o godzinie 14:22
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: [MS SQL] Wybranie najmłodszych rekordów

Tak z palca..


SELECT a.id, a.id_tow, a.datetime FROM tabela a
JOIN (SELECT distinct id_tow, max(datetime) date
FROM tabela
GROUP BY id_tow) b ON a.id_tow = b.id_tow
and a.datetime = b.datetime


Nie wiem jaka masz definicje szybkosci, ale najszybsze to to zapytanie nie bedzie (join po dacie) :)Bartosz Ślepowroński edytował(a) ten post dnia 20.02.09 o godzinie 09:13
Przemysław Szczerbicki

Przemysław Szczerbicki Programista,
freelancer

Temat: [MS SQL] Wybranie najmłodszych rekordów

A co w ten deseń:
SELECT a.id, a.id_tow, a.datetime FROM tabela a WHERE a.datetime = ( SELECT MAX( datetime ) FROM tabela WHERE id_tow = a.id_tow )

pzdr.
Tomasz M.

Tomasz M. never go full
retard!

Temat: [MS SQL] Wybranie najmłodszych rekordów

Dzięki, wystarcza ;]
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [MS SQL] Wybranie najmłodszych rekordów

Piszę z palca


SELECT
a.id, a.id_tow, a.datetime,
RANK() OVER (
PARTITION BY a.id_tow
ORDER BY a.datetime DESC
) AS 'RANK'
FROM tabela a
WHERE RANK = 1
Łukasz Schabek edytował(a) ten post dnia 19.02.09 o godzinie 15:16
Jacek Szarapa

Jacek Szarapa Project Manager,
Software Developer

Temat: [MS SQL] Wybranie najmłodszych rekordów

to jeszcze moze takie : :)))

select a.id, a.id_tow, a.datetime
FROM tabela a
where not exists (
select a1.Id from tabela a1
where a1.id_tow = a.id_tow and
a.datetime > a1.datetime
)Jacek Szarapa edytował(a) ten post dnia 19.02.09 o godzinie 15:20

konto usunięte

Temat: [MS SQL] Wybranie najmłodszych rekordów

Ja bym od tego zaczął. http://msdn.microsoft.com/en-us/library/ms176102.aspx

Łukasz: Byłeś pierwszy ;) ale przynajmniej pod 10g trzeba to w nawias opakować bo nie ma dostępu do tej etykiety.Rafał Wardas edytował(a) ten post dnia 19.02.09 o godzinie 15:26
Bartosz Ślepowronski

Bartosz Ślepowronski Problem? Jaki
problem?

Temat: [MS SQL] Wybranie najmłodszych rekordów

Zeby wyciagnac po rank trzeba dac drugiego selecta - wiec kod nie zadziala :)Bartosz Ślepowroński edytował(a) ten post dnia 19.02.09 o godzinie 15:36
Łukasz Schabek

Łukasz Schabek Architekt Rozwiązań

Temat: [MS SQL] Wybranie najmłodszych rekordów

:(
Hmm, przydało by się QUALIFY... :)

konto usunięte

Temat: [MS SQL] Wybranie najmłodszych rekordów

chcialem napisac cos mądrego ale nie doczytalem pytania :>.. łorewerJacek Ołowiak edytował(a) ten post dnia 22.02.09 o godzinie 12:12



Wyślij zaproszenie do