【发布时间】:2019-10-11 06:50:15
【问题描述】:
我正在尝试一个未返回所需结果的查询。
SELECT [ID], [bookno], [ECN] AS [Version No], [InsertedDate] AS [Add Date]
FROM [BooksBank]
WHERE [Flag] IS NULL AND [bookno] LIKE '%60003-74P00-F%'
AND [ECN] IN
(SELECT MAX(ECN) FROM [BooksBank]
WHERE [Flag] is NULL AND [bookno] LIKE '%60003-74P00-F%');
它正在返回以下结果
75822 | 60003-74P00-F2_511-7434.pdf | 20190527 | 2019-05-28 00:00:00.000
而不是下面这也是想要的结果
74967 | 60003-74P00-F_55S-0389.pdf | 20190213 | 2019-02-14 00:00:00.000
这种行为在技术上是正确的,但我想要这个结果
60003-74P00-F_55S-0389.pdf
请帮忙。
【问题讨论】:
-
最后一个条件是什么?目前,它只是将您的匹配列表减少为具有最高 ECN 的单个匹配... (删除
AND ECN IN(SELECT MAX(ECN) FROM blah)可能是您想要的修复,但您没有解释为什么,但它在第一个地点。) -
它正在产生具有最高ECN的结果,即版本或版本。这是一项要求,无法更改。
-
那么您的要求有问题:您想要具有最高 ECN 的 SINGLE 匹配记录,但您还希望返回第二条记录(它不会具有最高 ECN)。
-
是的,差不多就是这样。有人搞砸了导致这种情况的命名约定。无法编辑行,无法删除 max(ecn) - 现在,您是说存在死锁且无法解决?
-
您的要求毫无意义。你说你想要两条记录,但只有一条具有最高 ECN 的记录。你想要两张还是一张?你不能同时拥有它。
标签: sql sql-server database tsql