[英]Find consecutive dates in table (MYSQL)
我需要确定最近连续几天的车牌已记录在表格中。 盘子在给定的一天中可能会多次出现在桌子上,但是至少每24小时进行一次库存检查(以避免24小时的“结帐”)。
一天不是报告的24小时。 12小时<=天<= 24小时 。 即-如果车辆在8:00 am存货,并且一直呆到第二天8:00 pm(共36小时),则将登记为2天。
如果车辆离开存货的时间超过假定的25小时以上,则当前停留已结束,任何进一步的停留都是新的。
仅应报告任何一个LicensePlate的最新停留时间。
示例数据:
LicensePlate | TimeStamp | Location
---------------------------------------------
abc123 | 1969-01-01 08:42:23 | West Lot ---
abc123 | 1969-01-01 12:34:29 | West Lot ---
abc123 | 1969-01-01 18:20:10 | West Lot ---
abc123 | 1969-01-02 02:19:02 | West Lot --- 2 Days Closed
abc123 | 1969-01-02 08:38:05 | West Lot ---
abc123 | 1969-01-02 12:13:39 | West Lot ---
abc123 | 1969-01-02 20:43:34 | West Lot ---
123abc | 1969-01-02 09:31:04 | South Lot ---
123abc | 1969-01-02 15:31:04 | South Lot --- 1 Day (more than 12hr) Closed
123abc | 1969-01-02 22:31:04 | South Lot ---
abc123 | 1969-01-04 22:48:37 | North Lot ---
abc123 | 1969-01-05 17:57:32 | North Lot --- 4 Days (reported)
abc123 | 1969-01-06 14:12:48 | North Lot ---
abc123 | 1969-01-07 13:05:18 | North Lot ---
123abc | 1969-01-03 12:22:32 | East Lot ---
123abc | 1969-01-03 19:16:25 | East Lot ---
123abc | 1969-01-04 06:22:13 | East Lot ---
123abc | 1969-01-04 13:22:56 | East Lot --- 3 Days (reported)
123abc | 1969-01-05 11:22:32 | East Lot ---
123abc | 1969-01-06 08:22:44 | East Lot ---
123abc | 1969-01-06 12:22:08 | East Lot ---
生成的报告将包含以下数据
LicensePlate | EnteredDate | Location | DaysIn
----------------------------------------------------------
abc123 | 1969-01-04 12:48:37 | North Lot | 4
123abc | 1969-01-03 12:22:32 | North Lot | 3
实际表在架构上有所不同,只需要一个我应该如何完成此操作的指针即可。
找到一种完全可以完成我需要做的事情的方法。
SELECT Plate, Begin, StayEnd, Loc, DATEDIFF(StayEnd, Begin) As Count FROM (SELECT
Plate, Begin, max(`TimeStamp`) AS StayEnd, Loc FROM
(SELECT inven_table.*,
@f:=CONVERT(IF(@c<=>Plate AND @r<=>Loc AND DATEDIFF(`TimeStamp`, @d)<=1, @f,
`TimeStamp`), DATETIME) AS Begin,
@c:=Plate, @d:=`TimeStamp`, @r:=Loc
FROM inven_table JOIN (SELECT @c:=NULL) AS init
ORDER BY Plate,`TimeStamp`, Loc) AS t WHERE Plate = 'XXXXXX' GROUP BY Begin) As C
GROUP By Begin ORDER BY StayEnd DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.