gpt4 book ai didi

sql - SQL Server 2005 中的模数时间 - 每 n 小时返回一次数据

转载 作者:行者123 更新时间:2023-12-04 22:05:28 24 4
gpt4 key购买 nike

我有这样的东西:

 SELECt *
FROM (
SELECT prodid, date, time, tmp, rowid
FROM live_pilot_plant
WHERE date BETWEEN CONVERT(DATETIME, '3/19/2012', 101)
AND CONVERT(DATETIME, '3/31/2012', 101)
) b
WHERE b.rowid % 400 = 0

仅供引用:在 where 子句中进行转换的原因是因为我的日期存储为 varchar(10),我必须将其转换为日期时间才能获得正确的数据范围。 (我尝试了很多不同的东西,这很有效)

我想知道如何在这些选定日期内每 4 小时返回一次我想要的数据。我大约每 5 秒收集一次数据(数据中有一些中断)- 即数据不是在 2 小时内收集的,而是以 5 秒的增量继续收集。

在我的示例中,我只是对我的 rowid 使用了模数 - 并且语法有效,但正如我上面提到的,有些时间段没有收集数据,因此使用如下逻辑:如果您每 5 秒获取一次数据并将其乘以 4几个小时你可以大致说出中间有多少行是行不通的。

我的时间列是一个 varchar 列,格式为 hh:mm:ss

我的理想输出是:

  | prodid  | date       | time      |  tmp  |
| 4 | 3/19/2012 | 10:00:00 | 2.3 |
| 7 | 3/19/2012 | 14:00:24 | 3.2 |

如您所见,我可能有点偏离(以秒为单位)- 我更需要时间方面的近似值。

提前谢谢你。

最佳答案

这应该可行

select prodid, date, time, tmp, rowid
from live_pilot_plant as lpp
inner join (

select min(prodid) as prodid -- is prodid your PK?? if not change it to rowid or whatelse is your PK
from live_pilot_plant
WHERE date BETWEEN CONVERT(DATETIME, '3/19/2012', 101) -- or whatever you want
AND CONVERT(DATETIME, '3/31/2012', 101) -- for better performance it is on the inner select
group by date,
floor( -- floor makes the trick
convert(float,convert(datetime, time)) -- assumes "time" column is a varchar containing data like '19:23:05'
* 6 -- 6 comes form 24 hours / 4 hours
)

) as filter on lpp.prodid = filter.prodid -- if prodid is not the PK also correct here.

对于只有一个日期时间字段中有日期+时间数据的其他人的旁注,假设名为“when_it_was”,分组依据可以简单如下:

group by floor(when_it_was * 6)                  -- again, 6 comes from 24/4

关于sql - SQL Server 2005 中的模数时间 - 每 n 小时返回一次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11747851/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com