Я использую SSMS 2018 и у меня есть таблица, подобная этой:
CREATE TABLE DxList (DocID INT, Dx VARCHAR(255), DxDate DATE, CreateDate DATETIME);
INSERT INTO DxList (DocID, Dx, DxDate, CreateDate)
VALUES (6018, 'OSDD', '10/01/2015', '10/09/2015 12:27');
INSERT INTO DxList (DocID, Dx, DxDate, CreateDate)
VALUES (6018, 'ADHD', '10/01/2015', '10/09/2015 18:14');
SELECT *
FROM DxList
DocID Dx DxDate CreateDate
6018 OSDD 10/1/2015 10/9/2015 12:27
6018 ADHD 10/1/2015 10/9/2015 18:14
Я бы хотел получить самую последнюю Dx
на основе DxDate
. Row_number
сработает, однако, если есть связь, подобная приведенной выше (01.10.2015), я хочу, чтобы самая последняя была основана на CreateDate
.
В этом случае я бы хотел, чтобы мой результат был:
DocID Dx DxDate CreateDate
6018 ADHD 10/1/2015 10/9/2015 18:14
Я думаю, что могу использовать Rank()
с этим запросом, но я не уверен, как. Это мой запрос:
SELECT DISTINCT
DocID,
Dx,
DxDate,
CreateDate,
rownum1,
rank1
FROM (SELECT
DocID,
Dx,
DxDate,
CreateDate,
RANK() OVER (PARTITION BY DocID ORDER BY DxDate DESC) AS rank1,
ROW_NUMBER() OVER (PARTITION BY DocID ORDER BY DxDate DESC) AS rownum1
FROM DxList) b
WHERE rownum1 = 1
Мне кажется, я ищу что-то вроде:
Order By (Случай, когда rank1 = rank1, затем CreateDate else DxDate End) DESC
Конечно, это не работает, потому что мне нужна какая-то итерация и я не могу поместить ее в подзапрос.
Я также не могу использовать какие-либо производные таблицы для решения этой проблемы. Это возможно?
Очень признателен!