gpt4 book ai didi

sql-server - 获取最新条目的 SQL Server 返回错误结果。我错过了什么?

转载 作者:行者123 更新时间:2023-12-03 16:45:09 26 4
gpt4 key购买 nike

我对 SQL Server 查询/函数有一个奇怪的行为。

我有一个包含 3 列的表格(实际上还有更多列,但这 3 列与此任务相关)。这些列是 FileIdUserIdTimeCreated。有可能一个用户可以多次创建相同的 FileId,我想知道哪个是最新创建的文件。

我正在用这个 WHERE 子句来做:

WHERE TimeCreated IN (SELECT MAX(TimeCreated) 
FROM table
GROUP BY FileId, UserId)

在我看来这应该是正确的,但对于某些组,即使 TimeCreated 不同,它也会返回多行。

这里有一个结果作为例子:

TimeCreated              | UserId | FileId
------------------------------------------------------
2016-01-18 00:00:00.000 | UserA | FileA
2016-01-18 06:00:00:000 | UserA | FileA

但它应该只返回带有 '2016-01-18 06:00:00:000' 作为 TimeCreated 值的行。

我不明白出了什么问题,因为有更多的条目,其中有 UserA(作为 UserId)和 FileA(作为 FileId)但不同的 TimeCreated 值但它只返回这两行(所以在某种程度上,它非常有效)并且就像我说的那样,对于某些组来说没问题,但有时它会返回两行,它们具有相同的 UserId 和 FileId 但具有不同的 TimeCreated 值。当发生这种情况时,它总是两行而不是更多。

TimeCreated 是一个DateTimeOffset(7)UserId 是一个字符串以及FileId。也许知道这一点很重要...

有人能解释为什么会这样吗?

最佳答案

你应该改用这个语法:

;WITH CTE as
(
SELECT
*,
row_number() over (partition by FileId, UserId ORDER BY TimeCreated DESC)rn
FROM <table>
)
SELECT * FROM CTE
WHERE rn = 1

关于sql-server - 获取最新条目的 SQL Server 返回错误结果。我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37724611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com