您如何选择最新日期的值? [复制]
Posted
技术标签:
【中文标题】您如何选择最新日期的值? [复制]【英文标题】:How do you select the value for the latest date? [duplicate] 【发布时间】:2021-01-31 00:58:28 【问题描述】:我正在尝试简单地选择具有最新时间戳的值,但由于某种原因,我出现了某种大脑冻结。
下面的代码是选择所有记录:
SELECT S.idindicator, S.val ,[Time] = MAX(CAST(S.valTimestamp as date)), S.valTimestamp
FROM Status as S
WHERE S.INVALID = 0
AND S.id = 16888
GROUP by S.idindicator, S.val, S.valTimestamp
ORDER BY S.valTimestamp DESC
我如何简单地选择具有最新日期的val
,即 75.00?
注意:我已经使用相关子查询完成了它,但是,它将它变成了一个昂贵的查询。
【问题讨论】:
SELECT TOP 1 S.val FROM ...
你不能使用 ORDER BY 因为SELECT TOP 1 FROM (
会把它变成一个子查询,如果我没记错的话
@user3396351 你试过了吗?
是的,我试过了,ORDER BY 不能在子查询中使用
SELECT TOP <n>
返回前 n 行。你只想要第一个?
【参考方案1】:
如果您只想要一行,请使用top (1)
和order by
:
select top (1) *
from status s
where invalid = 0 and id = 16888
order by valTimestamp desc
如果您想在多个id
s 上获得相同的结果,那么一个选项使用窗口函数:
select *
from (
select s.*, row_number() over(partition by id order by valTimestamp desc) rn
from status s
where invalid = 0
) s
where rn = 1
如果您想允许平局,那么您将在第一个查询中使用top (1) with ties
,在第二个查询中使用rank()
而不是row_number()
。
【讨论】:
【参考方案2】:您可能正在寻找简单的东西:
SELECT TOP 1 S.idindicator, S.val , S.valTimestamp
FROM Status as S
WHERE S.INVALID = 0 AND S.id = 16888
GROUP by S.idindicator, S.val, S.valTimestamp
ORDER BY S.valTimestamp DESC
编辑:正如评论中指出的那样,t-sql 中不存在限制,请改用前 1
【讨论】:
LIMIT
不是 T-SQL 运算符;它使用TOP
。以上是关于您如何选择最新日期的值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 android 日期选择器中将特定选定日期设置为最小日期? [复制]