@Urukhayy

Как построить такой запрос?

Есть 2 таблицы. Первая содержит в себе много разных столбцов, но нас интересуют 2 столбца - Name и ID. Вторая содержит в себе 3 столбца: ID, Date, Reason, Type. Значение Type может быть от 1 до 3

Первая таблица используется лишь для поиска ID по Name, который будет в выборке для второй таблицы.

Нужно извлечь строки, относящиеся к определённому ID, таким образом, что из всего множества строк с Type, которые относятся к этому ID, извлекутся по 1 экземпляру. И извлекутся именно те экземпляры, которые добавлены в таблицу позже.

Как выглядит таблица данных:
ID Date Reason Type
1 12.03.14 abc 1
1 13.03.14 sdfbc 1
1 14.03.14 asdfbc 2
1 12.03.14 abc 3
1 15.03.14 abc 2
2 16.03.14 abc 1

В результате запроса у нас для ID 1 должно быть всего 3 строки, так как для заданного количества строк с ID 1 количество разных типов = 3. Причем обратите внимание, у нас несколько строк для ID 1 с типом 1 и типом 2. Таким образом нужно извлечь самые свежие строчки с типом 1 и типом 2, ну и с типом 3.

Также обратите внимание, что количество типов может варьироваться.

Пробовал делать таким запросом, но это не то.
SELECT
    TYPE,
    REASON,
    MAX(DATE) AS DT
FROM TABLE
    INNER JOIN USERS ON USERS.ID = TABLE.ID
WHERE
    USERS.NAME = 'Test'
GROUP BY
    TYPE
ORDER BY DT DESC

Если использовать этот запрос, то он путает значения Date от одной строки, со значением Reason другой.
  • Вопрос задан
  • 2266 просмотров
Пригласить эксперта
Ответы на вопрос 1
chevanton
@chevanton
26lvl
REASON в группировку
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы