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

Кажется, действительно глупо спрашивать, но я не могу сделать этот выбор в 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

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


person gubbfett    schedule 10.02.2014    source источник


Ответы (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.

person Gordon Linoff    schedule 10.02.2014

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

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);
person Alberto Solano    schedule 10.02.2014