MySql select 每小时第一行,接下来 5 分钟跳过行

MySql select first rows in every hour, skip rows next 5 minutes

我正在尝试 Select 仅从小时开始的第一行作为示例作为日期时间可选每 2 Hours/3Hours

2020-09-30 09:37:04 SELECT
2020-09-30 09:37:04 SELECT
2020-09-30 09:45:04 SKIP
2020-09-30 09:45:04 SKIP
2020-09-30 09:54:04 SKIP
2020-09-30 10:37:04 SELECT

另一方面,我认为有一个解决方案,但它不起作用.. 可能错误等于 VAR?

SET @prev=0;
SELECT `Date`,@prev, @prev:=UNIX_TIMESTAMP(`Date`) 
FROM `tab`
WHERE FLOOR(UNIX_TIMESTAMP(`Date`)/3600)%2 AND UNIX_TIMESTAMP(`Date`)= @prev;```

不存在:

select t.* from tab t
where not exists (
  select 1 from tab 
  where date_format(date, '%Y%m%d%H') = date_format(t.date, '%Y%m%d%H')
    and date < t.date
)

或使用 RANK() window 函数:

select date
from (
  select date,
    rank() over (partition by date_format(date, '%Y%m%d%H') order by date) rnk
  from tab
) t
where t.rnk = 1

参见demo
结果:

> | date                |
> | :------------------ |
> | 2020-09-30 09:37:04 |
> | 2020-09-30 09:37:04 |
> | 2020-09-30 10:37:04 |