use*_*620 2 c# sql sql-server asp.net
我有这个
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;
Run Code Online (Sandbox Code Playgroud)
哪个可以获得最新记录.但如果找不到什么呢?我怎样才能让它返回倒退的最新记录?意味着如果没有比给定DateTime更新的项目,它将反向返回并获取它找到的第一个项目.
谢谢
有两种选择:
1)If @@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;
Run Code Online (Sandbox Code Playgroud)
在进一步审查之后,除非你已经大量简化了这个查询,否则你做了太多的工作:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |