помочь с четкими строками и упорядочением данных - PullRequest
0 голосов
/ 20 ноября 2008

Если у меня есть записи:

Row  Date,        LocationID, Account
1    Jan 1, 2008  1           1000
2    Jan 2, 2008  1           1000
3    Jan 3, 2008  2           1001
4    Jan 3, 2008  1           1001
5    Jan 3, 2008  3           1001
6    Jan 4, 2008  3           1002

Мне нужно получить строку (date, locatinid, account), где строка имеет самую последнюю дату для каждого отдельного locationid:

4    Jan 3, 2008  1           1001
3    Jan 3, 2008  2           1001
6    Jan 4, 2008  3           1002

Ответы [ 4 ]

2 голосов
/ 20 ноября 2008

Я думаю, что это будет работать:

SELECT t1.*
FROM table t1
  JOIN (SELECT MAX(Date), LocationID
        FROM table
        GROUP BY Date, LocationID) t2 on t1.Date = t2.Date and t1.LocationID = t2.LocationID
0 голосов
/ 20 ноября 2008
select t.* from mytable t,
(select max(Date) as Date,LocationID from mytable group by LocationID) t1 
where t.Date = t1.Date and t.LocationID = t1.LocationID 
order by t1.LocationID 
0 голосов
/ 20 ноября 2008
SELECT t1.*
FROM mytable t1
  LEFT OUTER JOIN mytable t2
  ON (t1.locationid = t2.locationid 
    AND (t1.date < t2.date OR t1.date = t2.date AND t1.row < t2.row))
WHERE t2.row IS NULL;

Это решение возвращает только одну строку для locationid, даже если существует несколько строк с одинаковой максимальной датой.

0 голосов
/ 20 ноября 2008

Попробуйте что-то вроде:

select *
from mytable t1
where date = (select max(date) from mytable t2
              where t2.location = t1.location);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...