Wyciągnięcie najmłodszego wpisu - problem z grupowaniem

0

Cięzko opisać więc przykład:

+-------+-----------+-----------+-----------+---------------------------+
| Id	| Magazyn	| Nazwa		| Symbol	| DataSprz					|
+-------+-----------+-----------+-----------+---------------------------+
| 6 	| Mag1 		| Towar2	| BR2 		| 2020-06-09 08:21:19.000	|
| 8 	| Mag1 		| Towar1	| BR1 		| 2020-06-15 12:55:35.000	|
| 7 	| Mag1 		| Towar2	| BR2 		| 2019-12-30 14:24:13.000	|
| 5 	| Mag1 		| Towar1	| BR1 		| 2020-07-28 12:55:35.000	|
| 4 	| Mag1 		| Towar1	| BR1 		| 2020-07-28 12:55:35.000	|
| 3 	| Mag1 		| Towar2	| BR2 		| 2020-07-28 11:24:33.000	|
| 1 	| Mag1 		| Towar1	| BR1 		| 2020-07-01 14:01:28.000	|
| 2 	| Mag1 		| Towar1	| BR1 		| 2019-12-30 14:24:13.000	|
+-------+-----------+-----------+-----------+---------------------------+

Potrzebuję najmłodszy wpis z nazwą towaru, symbolem i datą więc:

SELECT
	Magazyn,
	Nazwa,
	Symbol,
	MAX(Data)
FROM tabela
GROUP BY
	Magazyn,
	Nazwa,
	Symbol

da wynik:

+-----------+-----------+-----------+---------------------------+
| Magazyn	| Nazwa		| Symbol	| DataSprz					|
+-----------+-----------+-----------+---------------------------+
| Mag1 		| Towar1	| BR1 		| 2020-07-28 12:55:35.000	|
| Mag1 		| Towar2	| BR2 		| 2020-07-28 11:24:33.000	|
+-----------+-----------+-----------+---------------------------+

I teraz mój problem: jak uzyskać taki sam wynik ale z Id? Kiedy dodam do zapytania ID w wyniku dostanę całą tabelę bo idki są unikalne. Jak to tego podejść?

3
SELECT t.* FROM tabela t JOIN (
SELECT
    Magazyn,
    Nazwa,
    Symbol,
    MAX(Data) Data
FROM tabela
GROUP BY
    Magazyn,
    Nazwa,
    Symbol) x USING(Magazyn,Nazwa,Symbol,Data)
0

w MS SQL jest row_number:

SELECT T1.id,
Magazyn,
Nazwa,
Symbol,
[Data]
FROM tabela T1 join
(SELECT id,ROW_NUMBER() over(partition by magazyn,nazwa,symbol order by [Data] desc) as lp
FROM tabela) T2 on T1.id = T2.id and T2.lp = 1

2

@niemand: Ten join jest niepotrzebny:

select * from 
(SELECT ROW_NUMBER() over(partition by magazyn,nazwa,symbol order by [Data] desc) as lp,*
FROM tabela) dt
where lp=1
0

Dziękuję, dokładnie o to chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1