Выберите отличное место, где максимальная дата

Это глупо спрашивать, но я не могу сделать этот выбор в SQL Server Compact (CE)

Если у меня есть две таблицы, как это:

Statuses                      Users
id | status   | thedate        id | name
-------------------------      -----------------------
0  | Single   | 2014-01-01     0  | Lisa
0  | Engaged  | 2014-01-02     1  | John
1  | Single   | 2014-01-03
0  | Divorced | 2014-01-04

Как я могу теперь выбрать последний статус для каждого человека в статусах? результат должен быть:

Id | Name | Date       | Status
--------------------------------
0  | Lisa | 2014-01-04 | Divorced
1  | John | 2014-01-03 | Single

то есть, выберите различные идентификаторы: где дата является самой высокой, и присоедините имя. В качестве бонуса, сортируйте список так, чтобы последняя запись была на вершине.

2 ответа

Решение

В SQL Server CE вы можете сделать это, используя join:

select u.id, u.name, s.thedate, s.status
from users u join
     statuses s
     on u.id = s.id join
     (select id, max(thedate) as mtd
      from statuses
      group by id
     ) as maxs
     on s.id = maxs.id and s.thedate = maxs.mtd;

Подзапрос вычисляет максимальную дату и использует ее в качестве фильтра для statuses Таблица.

Используйте следующий запрос:

SELECT U.Id AS Id, U.Name AS Name, S.thedate AS Date, S.status AS Status
FROM Statuses S
INNER JOIN Users U on S.id = U.id
WHERE S.thedate IN (
         SELECT MAX(thedate)
         FROM statuses
         GROUP BY id);
Другие вопросы по тегам