gpt4 book ai didi

c# - SQL Server 2008 从大于给定日期时间的返回值中选择最小值

转载 作者:行者123 更新时间:2023-11-30 19:30:38 25 4
gpt4 key购买 nike

我有这个

WITH sequenced_records AS (
SELECT ROW_NUMBER() OVER (ORDER BY [DateTime] DESC) AS sequence_id, *
FROM StreamView
WHERE TypeOf = @TypeOf
AND [DateTime] >= @DateTime
)
SELECT * FROM sequenced_records WHERE sequence_id = 1;

这对于获取最新记录非常有效。但是,如果它没有找到任何东西怎么办?我怎样才能让它返回倒退的最新记录?这意味着如果没有比给定的 DateTime 更新的项目,它会倒退并获取它找到的第一个项目。

谢谢

最佳答案

几个选项:

1) 如果@@RowCount = 0 执行单独的选择。

2) 选择一个本地表,然后如果它不包含任何行,则使用您的新查询选择它,然后从该表中选择以将数据返回给调用者。

并且单独的选择可能是(没有测试过这个并且不熟悉语句,但无论如何这里都是):

WITH sequenced_records_one AS (
SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY [DateTime] DESC) AS sequence_id, *
FROM StreamView
WHERE TypeOf = @TypeOf
)
SELECT * FROM sequenced_records_one WHERE sequence_id = 1;

经过进一步审查,除非你大大简化了这个查询,否则你做的工作太多了:

SELECT TOP 1
*
FROM StreamView
WHERE TypeOf = @TypeOf
AND [DateTime] >= @DateTime
ORDER BY [DateTime] DESC

IF @@RowCount = 0
BEGIN
/* Get the first record created today */
SELECT TOP 1
*
FROM StreamView
WHERE TypeOf = @TypeOf
AND [DateTime] >= CONVERT(DATE, GETDATE())
ORDER BY [DateTime] ASC
END

关于c# - SQL Server 2008 从大于给定日期时间的返回值中选择最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696848/

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