我的查询应该怎么做才能得到我的记录?

时间:2016-06-02 17:52:22

标签: mysql sql

我有一张桌子,当汽车进入停车场时我会记录,我需要将记录提前半小时。 比如我得到了

id, time date
1, 10:01 2016-05-30
2, 10:15 2016-05-30
3, 10,29 2016-05-30
4, 10:31 2016-05-30
5, 10:45 2016-05-30
6, 11:00 2016-05-30
7, 11:11 2016-05-30
8, 11:15 2016-05-30

所以在我的情况下,我会得到记录:3,6和8

现在我使用的是:

.....
SELECT id, MAX(fecha) AS fecha, DATE_FORMAT(MAX(m.fecha), '%H:%i:%s') AS hora
FROM estacionamientos 
WHERE (DATE_FORMAT(fecha, '%H:%i:%s') BETWEEN '15:30:00' AND '16:00:00')
AND (DATE_FORMAT(fecha, '%Y-%m-%d') = '2016-05-30')
UNION
SELECT id, MAX(fecha) AS fecha, DATE_FORMAT(MAX(m.fecha), '%H:%i:%s') AS hora
FROM estacionamientos 
WHERE (DATE_FORMAT(fecha, '%H:%i:%s') BETWEEN '16:00:01' AND '16:30:00')
AND (DATE_FORMAT(fecha, '%Y-%m-%d') = '2016-05-30')
.....
ORDER BY hora DESC

但有没有比创建48个工会更好的方法呢?

1 个答案:

答案 0 :(得分:0)

好的,我找到了一种方法,通过将其与unix_timestamp分组:

SELECT id, fecha, DATE_FORMAT(fecha, '%H:%i:%s') AS hora
FROM estacionamientos 
WHERE (DATE_FORMAT(fecha, '%H:%i:%s') BETWEEN '00:00:00' AND '23:59:59')
AND (DATE_FORMAT(fecha, '%Y-%m-%d') = '2016-05-30')
GROUP BY 
UNIX_TIMESTAMP(fecha) DIV 1800
ORDER BY fecha DESC

希望这有助于将来的任何人。