Java MS SQL聚合和时间戳查询 时间戳仪表名称参数名称值 2014-02-18 18:58:00 1美元新加坡元415.7806091308594 2014-02-18 18:58:00 1美元新加坡元240.33735673828 2014-02-18 18:58:01 2美元新加坡元393.191162109375 2014-02-18 18:58:02 2美元新加坡元50.10090637207031 2014-02-18 18:58:00 3美元新加坡元A 34841472 2014-02-18 18:05:01 1美元新加坡元 2014-02-18 17:58:01 1美元新加坡元 2014-02-18 17:58:01 2美元新加坡元A 290 2014-02-18 17:58:01 2美元新加坡元D 0 2014-02-18 17:58:01 3$SGP A 3061691904 2014-02-18 17:57:01 3美元新加坡元 2014-02-18 17:57:02 3美元新加坡元B 0

Java MS SQL聚合和时间戳查询 时间戳仪表名称参数名称值 2014-02-18 18:58:00 1美元新加坡元415.7806091308594 2014-02-18 18:58:00 1美元新加坡元240.33735673828 2014-02-18 18:58:01 2美元新加坡元393.191162109375 2014-02-18 18:58:02 2美元新加坡元50.10090637207031 2014-02-18 18:58:00 3美元新加坡元A 34841472 2014-02-18 18:05:01 1美元新加坡元 2014-02-18 17:58:01 1美元新加坡元 2014-02-18 17:58:01 2美元新加坡元A 290 2014-02-18 17:58:01 2美元新加坡元D 0 2014-02-18 17:58:01 3$SGP A 3061691904 2014-02-18 17:57:01 3美元新加坡元 2014-02-18 17:57:02 3美元新加坡元B 0,java,sql-server,mssql-jdbc,Java,Sql Server,Mssql Jdbc,查找两个连续时间戳的时间戳差异,以及特定参数下每个单独仪表的时间戳值差异 预期产量:18:58 01:00 1$SGP 415.7806091308594-0 01:00 2美元新加坡元393.191162109375-290 01:00 3$SGP 3484841472-3061691904 在18:58,1$SGP、2$SGP和3$SGP抛出参数A的值。 17:58时,1$SGP、2$SGP和3$SGP抛出参数A的值。 Rest或者所有仪表都没有出现在18:05中的时间戳中 时间戳中的秒数可

查找两个连续时间戳的时间戳差异,以及特定参数下每个单独仪表的时间戳值差异

预期产量:18:58

01:00 1$SGP 415.7806091308594-0
01:00 2美元新加坡元393.191162109375-290
01:00 3$SGP 3484841472-3061691904

在18:58,1$SGP、2$SGP和3$SGP抛出参数A的值。 17:58时,1$SGP、2$SGP和3$SGP抛出参数A的值。 Rest或者所有仪表都没有出现在18:05中的时间戳中 时间戳中的秒数可以忽略。 所以

01:00 1美元新加坡元415.7806091308594-0 01:00 2美元新加坡元393.191162109375-290 01:00 3$SGP 3484841472-3061691904


在MS SQL中提出查询时遇到问题。我也不熟悉convert方法,它会忽略mysql中可以处理date_format()的第二个参数。

以下是示例表:

time stamp meter name parameter name value 2014-02-18 18:58:00 1$SGP A 415.7806091308594 2014-02-18 18:58:00 1$SGP B 240.3373565673828 2014-02-18 18:58:01 2$SGP A 393.191162109375 2014-02-18 18:58:02 2$SGP B 50.10090637207031 2014-02-18 18:58:00 3$SGP A 3484841472 2014-02-18 18:05:01 1$SGP A 0 2014-02-18 17:58:01 1$SGP A 0 2014-02-18 17:58:01 2$SGP A 290 2014-02-18 17:58:01 2$SGP D 0 2014-02-18 17:58:01 3$SGP A 3061691904 2014-02-18 17:57:01 3$SGP A 0 2014-02-18 17:57:02 3$SGP B 0 以下是问题:

create table #t(ts datetime, mn char(5), pn char, val decimal (25,15));

insert #t values 
('2014-02-18 18:58:00',      '1$SGP',           'A',          415.7806091308594),
('2014-02-18 18:58:00',      '1$SGP',           'B',          240.3373565673828),
('2014-02-18 18:58:01',      '2$SGP',           'A',          393.191162109375),
('2014-02-18 18:58:02',      '2$SGP',           'B',           50.10090637207031),
('2014-02-18 18:58:00',      '3$SGP',           'A',          3484841472),
('2014-02-18 18:05:01',      '1$SGP',           'A',          0),
('2014-02-18 17:58:01',      '1$SGP',           'A',          0),
('2014-02-18 17:58:01',      '2$SGP',           'A',          290),
('2014-02-18 17:58:01',      '2$SGP',           'D',          0),
('2014-02-18 17:58:01',      '3$SGP',           'A',          3061691904),
('2014-02-18 17:57:01',      '3$SGP',           'A',          0),
('2014-02-18 17:57:02',      '3$SGP',           'B',          0);

如果这个答案对你有用,请接受/投票,以便其他人可以从中受益。
;with t as (
    select cast(ts as smalldatetime) as ts, mn, pn, val from #t
)
,
tt as (
    select ts from t
    group by ts
    having count(*) >= 3
),
ttt as (
    select *, row_number() over(partition by mn, pn order by ts desc) as rn
    from t where t.ts in (select tt.ts from tt)
)
select t1.ts, t1.mn, t1.val, t2.val
from ttt t1
inner join ttt t2 on t1.mn = t2.mn and t1.pn = t2.pn and t1.rn = 1 and t2.rn = 2;