似乎很久以前我需要创建自己的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)
答案 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