Mam poniższej tabelijak używać grupę SQL do filtrowania wierszy o maksymalnej wartości daty
CREATE TABLE Test
(`Id` int, `value` varchar(20), `adate` varchar(20))
;
INSERT INTO Test
(`Id`, `value`, `adate`)
VALUES
(1, 100, '2014-01-01'),
(1, 200, '2014-01-02'),
(1, 300, '2014-01-03'),
(2, 200, '2014-01-01'),
(2, 400, '2014-01-02'),
(2, 30 , '2014-01-04'),
(3, 800, '2014-01-01'),
(3, 300, '2014-01-02'),
(3, 60 , '2014-01-04')
;
chcę osiągnąć wynik, który wybiera tylko Id posiadające maksymalną wartość daty. tj
Id, wartość, aDate
1, 300,'2014-01-03'
2, 30 ,'2014-01-04'
3, 60 ,'2014-01-04'
w jaki sposób można to osiągnąć stosując group by
? Zrobiłem co następuje, ale to nie działa.
Select Id,value,adate
from Test
group by Id,value,adate
having adate = MAX(adate)
Czy ktoś może pomóc w zapytaniu?
Co jeśli 'adate' musi zostać określone przez 2 inne kolumny, które muszą być traktowane jako związki? –
@FabianPicone: Zasada jest taka sama. Napisz zapytanie, które zwraca jeden wiersz na "id" i dołącz do niego. Być może trzeba będzie napisać zapytanie UNION, a następnie WYBRAĆ z niego. (WYBIERZ * Z (WYBIERZ ... WYBÓR UNII ...)) –