Выберите отличное место, где максимальная дата
Это глупо спрашивать, но я не могу сделать этот выбор в 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);