MySQL - 如何对小时进行分组,偏移 30 分钟

发布于 2024-11-18 14:21:55 字数 429 浏览 1 评论 0原文

我想选择 1 小时间隔内的记录,以及小时间隔内的最高值和最低值。我可以按小时(例如,凌晨 1:00、凌晨 2:00、凌晨 3:00)执行此操作,但我想按指定的分钟(例如,凌晨 1:30、凌晨 2:30、凌晨 3:30、或凌晨 1:50、凌晨 2:50、凌晨 3:50)。我不想按半小时分组(例如 1:00、1:30、2:00、2:30) 这是我以 1 小时为间隔的 SQL:

select date(date) 'aDate', hour(date) 'aHour', date, bidOpen, max(bidHigh), min(bidLow)
from data
where date > "2010-10-10"
group by aDate, aHour

我尝试过:hour(date) + .5 'aHour' :但它不起作用。

谢谢 !!

I'd like to select records in 1 hour intervals, along with the highest and loest value in the hour interval. I can do this on the hour (eg, 1:00 am, 2:00 am, 3:00 am), but I'd like to offset it by specified minutes (eg, 1:30 am, 2:30 am, 3:30 am, or 1:50am, 2:50 am, 3:50 am). I don't want to group by half-hour (eg 1:00, 1:30, 2:00, 2:30)
This is the SQL I have for 1 hour intervals:

select date(date) 'aDate', hour(date) 'aHour', date, bidOpen, max(bidHigh), min(bidLow)
from data
where date > "2010-10-10"
group by aDate, aHour

I tried: hour(date) + .5 'aHour' : but it didn't work.

Thanks !!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月静好 2024-11-25 14:21:55

解决方案是使用包含时间片的辅助表。

FromHour 和 ToHour 只是字符串

TABLE timeslice
ID | FromHour | ToHour | NextDay
---+----------+--------+-------
1  | 00:30    | 01:30  | 0
2  | 01:30    | 02:30  | 0
<snip>
24 | 23:30    | 00:30  | 1

select date(date) aDate, ID ,date, bidOpen, max(bidHigh),min(bidLow)
from data inner join timeslice
    ON date >= CONCAT(date(Date),' ',FromHour) 
    and date < concat(date(DATEADD(day,NextDay,date),' ',ToHour)
group by aDate, ID

A solution is to use an helper table which contains your timeslice.

The FromHour and ToHour are just strings

TABLE timeslice
ID | FromHour | ToHour | NextDay
---+----------+--------+-------
1  | 00:30    | 01:30  | 0
2  | 01:30    | 02:30  | 0
<snip>
24 | 23:30    | 00:30  | 1

select date(date) aDate, ID ,date, bidOpen, max(bidHigh),min(bidLow)
from data inner join timeslice
    ON date >= CONCAT(date(Date),' ',FromHour) 
    and date < concat(date(DATEADD(day,NextDay,date),' ',ToHour)
group by aDate, ID
岁月静好 2024-11-25 14:21:55

如果您将日期/时间存储为时间戳,则可以对从半小时开始的小时间隔执行诸如 GROUP BY FLOOR(MOD((mytimestamp-1800)/3600)) 之类的数学操作。

If you store your date/times as timestamps, you can do mathy things like GROUP BY FLOOR(MOD((mytimestamp-1800)/3600)) for hour intervals starting on the half hour.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文