SQL语句只有当天的最新条目

时间:2015-11-13 14:13:02

标签: sql h2 greatest-n-per-group

似乎很久以前我需要创建自己的SQL语句。我有一个表(GAS_COUNTER),带有时间戳(TS)和值(VALUE)。 每天有数百个条目,但我只需要最新的一天。我尝试了不同的方法但从未得到我需要的东西。

修改

感谢快速回复,但有些不满足我的需求(我需要表中每天的最新价值),有些不起作用。我最好的陈述是:

address2011_MD_DC[, input_address := paste(na.omit(c(NUM_MILE,STREET_PRE,STREETNAME,STREETTYPE,STREETSUF,APT_NO)),collapse = " ") ]
address2011_MD_DC[, input_address :=
                str_c(na.omit(c(NUM_MILE,STREET_PRE,STREETNAME,STREETTYPE,STREETSUF,APT_NO)), collapse = ' ' )]

但缺少价值。如果我把它放在第一个选择所有行返回。 (逻辑正确,因为每一行都是不同的) 这里是表内容的一个例子:

paste0

第二次编辑和解决方案

select distinct (COUNT),
 from
  (select
   extract (DAY_OF_YEAR from TS) as COUNT,
   extract (YEAR from TS) as YEAR,
   extract (MONTH from TS) as MONTH,
   extract (DAY from TS) as DAY,
   VALUE as VALUE
 from GAS_COUNTER
order by COUNT)

3 个答案:

答案 0 :(得分:4)

这个会给你最后的记录:

select top 1 * from GAS_COUNTER order by TS desc 

这是一个可以为您提供每天最后记录的内容:

select VALUE from GAS_COUNTER 
where TS in (
    select max(TS) from GAS_COUNTER group by to_date(TS,'yyyy-mm-dd')
)

根据您使用的数据库,您可能需要替换/调整to_date(TS,'yyyy-mm-dd')函数。基本上它应该从时间戳中提取仅限日期的部分。

答案 1 :(得分:0)

这样的东西可以显示数据并为您提供当天的最后一个值 - 但如果您获得两个相同的TS,会发生什么?你想要哪一个?

select *
from (  select distinct cast( TS as date ) as dt
        from GAS_COUNTER ) as gc1       --  distinct days
    cross apply (
        select top 1 VALUE      --  last value on the date.
        from GAS_COUNTER as gc2
        where gc2.TS < dateadd( day, 1, gc1.dt )
          and gc2.TS >= gc1.dt
        order by gc2.TS desc
        ) as x

答案 2 :(得分:0)

选择时间戳的最大值。

select MAX(TS), value -- or whatever other columns you want from the record
from GAS_COUNTER
group by value