У меня проблема с таблицей ниже. Я должен выбрать только пользователей с наибольшим USCO_DFR и USCO_AHO = '1' . Итак, из приведенного ниже примера:
+----------+-------------------------+----------+
| USER_KEY | USCO_DFR | USCO_AHO |
+----------+-------------------------+----------+
| 1 | 2018-06-01 00:00:00.000 | NULL |
| 1 | 2018-03-05 00:00:00.000 | 1 |
| 1 | 2018-02-10 00:00:00.000 | NULL |
| 2 | 2018-07-10 00:00:00.000 | 1 |
| 2 | 2018-04-05 00:00:00.000 | NULL |
| 2 | 2018-01-15 00:00:00.000 | NULL |
| 3 | 2018-09-10 00:00:00.000 | 1 |
| 3 | 2018-05-05 00:00:00.000 | NULL |
| 3 | 2018-04-15 00:00:00.000 | NULL |
+----------+-------------------------+----------+
только USER_KEY = 2,3 .
Ожидаемый результат:
+----------+-------------------------+----------+
| USER_KEY | USCO_DFR | USCO_AHO |
+----------+-------------------------+----------+
| 2 | 2018-07-10 00:00:00.000 | 1 |
| 3 | 2018-09-10 00:00:00.000 | 1 |
+----------+-------------------------+----------+
Этот запрос сортирует результаты:
SELECT * FROM @BAUSCO ORDER BY USER_KEY, USCO_DFR DESC
но я не знаю, как выбрать эти USER_KEYs из результата? В основном я должен выбрать только верхнюю строку из каждого набора, где это удовлетворяет условию USCO_AHO = '1' .
DECLARE @BAUSCO TABLE
(
USER_KEY INT,
USCO_DFR DATETIME,
USCO_AHO CHAR(1)
)
INSERT @BAUSCO(USER_KEY, USCO_DFR, USCO_AHO)
VALUES (1, '2018-02-10', NULL),
(1, '2018-03-05', '1'),
(1, '2018-06-01', NULL),
(2, '2018-01-15', NULL),
(2, '2018-04-05', NULL),
(2, '2018-07-10', '1'),
(3, '2018-04-15', NULL),
(3, '2018-05-05', NULL),
(3, '2018-09-10', '1')