您如何选择最新日期的值? [复制]

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

如果您想在多个ids 上获得相同的结果,那么一个选项使用窗口函数:

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 日期选择器中将特定选定日期设置为最小日期? [复制]

如何连接表以选择连接表中的最大行? [复制]

如何选择产品的最新价格? [复制]

如何编辑我的 postgreSQL 查询以按日期选择几列的最新行

如何根据 html 日期选择器选择的值从数据库中选择记录

如何选择具有最新日期的行并根据该行计算另一个字段