繁体   English   中英

在表格中查找连续的日期(MYSQL)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM