停车场

致命的西瓜 2014-09-27 09:30:43

数据库表
DROP TABLE IF EXISTS `ParkCarLong`;
CREATE TABLE `ParkCarLong` (
`parkCarId` int(19) NOT NULL AUTO_INCREMENT COMMENT '编码 ',
`carPlateNumber` varchar(20) NOT NULL COMMENT '车牌号 ',
`parkDate` datetime NOT NULL COMMENT '进出场时间',
`status` varchar(4) NOT NULL COMMENT '状态 进场 出场',
PRIMARY KEY (`parkCarId`),
KEY `Index_ParkCarLong_carPlateNumber` (`carPlateNumber`) USING BTREE,
KEY `Index_ParkCarLong_parkDate` (`parkDate1`) USING BTREE,
) ENGINE=InnoDB AUTO_INCREMENT=59733290 DEFAULT CHARSET=utf8;

数据
1 A1 2014-07-01 00:00:41 进场
2 A2 2014-07-01 00:00:42 进场
3 A2 2014-07-01 00:22:55 出场
4 A3 2014-07-01 00:00:58 进场
5 A4 2014-07-01 00:02:06 进场
6 A1 2014-07-01 01:00:23 出场
7 A3 2014-07-02 00:22:42 出场
8 A4 2014-07-05 00:44:00 出场
9 A1 2014-07-05 01:50:00 进场
10 A1 2014-07-07 02:44:00 出场

现在要把进出场分开 并将进出场时间不是相邻两天的放到一张表里
像这样:
1 A4 2014-07-01 00:02:06 进场 2014-07-05 00:44:00 出场
2 A1 2014-07-05 01:50:00 进场 2014-07-07 02:44:00 出场


....Onz
...全文
108 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaofei8704 2014-09-28
  • 打赏
  • 举报
回复
哎呀,兄弟啊,我之前回复过你的问题了吧~~哎,又让我看到了: 1、这个是相差时间大于24小时的:

mysql> SELECT * FROM ParkCarLong a ;
+-----------+----------------+---------------------+--------+
| parkCarId | carPlateNumber | parkDate            | status |
+-----------+----------------+---------------------+--------+
|         1 | A1             | 2014-07-01 00:00:41 | 进场   |
|         2 | A2             | 2014-07-01 00:00:42 | 进场   |
|         3 | A2             | 2014-07-01 00:22:55 | 出场   |
|         4 | A3             | 2014-07-01 00:00:58 | 进场   |
|         5 | A4             | 2014-07-01 00:02:06 | 进场   |
|         6 | A1             | 2014-07-01 01:00:23 | 出场   |
|         7 | A3             | 2014-07-02 00:22:42 | 出场   |
|         8 | A4             | 2014-07-05 00:44:00 | 出场   |
|         9 | A1             | 2014-07-05 01:50:00 | 进场   |
|        10 | A1             | 2014-07-07 02:44:00 | 出场   |
+-----------+----------------+---------------------+--------+
10 rows in set (0.00 sec)

mysql> SELECT *  FROM
    -> (
    -> SELECT a.carPlateNumber,a.parkDate intime ,MIN(b.parkDate)   outtime
    -> FROM
    -> (SELECT * FROM ParkCarLong a WHERE a.status='进场') a
    -> LEFT JOIN
    -> (SELECT * FROM ParkCarLong a WHERE a.status='出场') b
    -> ON a.carPlateNumber=b.carPlateNumber
    -> AND a.parkDate<b.parkDate
    -> GROUP BY a.carPlateNumber,a.parkDate
    -> ) t
    -> WHERE   SUBSTR(TIMEDIFF(t.outtime,t.intime),1,2)>=24;
+----------------+---------------------+---------------------+
| carPlateNumber | intime              | outtime             |
+----------------+---------------------+---------------------+
| A1             | 2014-07-05 01:50:00 | 2014-07-07 02:44:00 |
| A3             | 2014-07-01 00:00:58 | 2014-07-02 00:22:42 |
| A4             | 2014-07-01 00:02:06 | 2014-07-05 00:44:00 |
+----------------+---------------------+---------------------+
3 rows in set (0.00 sec)
你描述的进出场时间不是相邻两天的过滤条件把 SUBSTR(TIMEDIFF(t.outtime,t.intime),1,2)>=24; 换成 DATEDIFF(t.outtime,t.intime) >1 就好了!
ACMAIN_CHM 2014-09-27
  • 打赏
  • 举报
回复
为什么结果中不需要 A1 2014-07-01 00:00:41 进场记录? 建议描述清楚逻辑。
初始化停车场(确定停车区个数n,每个停车区的停车位,且初始时,停车场为空),说明:使用一个共享数组(临界资源)存储每个停车区中空闲停车位的个数,每一个停车区使用一个共享缓冲区可容纳一辆车,停车场公共通道允许通过两辆车通过。 停车场入口检查是否有空闲停位,如果有发放相关停车区的停车卡,允许停车。如果不存在空闲车位,等待到有空闲车位止。注,入口处应尽量发放不同停车区的停车卡,以获得更高的效率。停车场过道允许两辆车同时通过。 停车场出口,回收停车卡,并修改相关停车区空闲车位数。注:同一时刻只能有一个车出停车场。 每一个停车区,有一个待车位,供进入停车区车辆进入停车区。停车区只能有一辆车进或出。 每辆车每进入下一环节皆应停留一定时间。每一个用户建立一个窗口,于窗口中显示当前将态。将状态转换可由人工确定亦可自动完成,但进入下状态时需要停留学生一定的时间,以保证多个用户“并行”工作。 本框架由四个类组成,这四个类分别是:InitFrame、WotkFram、carJFrame及carThread,由InitFrame启动。类InitFrame提供停车场初始化功能,完成初始任务后启动类WotkFram界面,执行停车场模拟程序,点击命令按扭“进入停车场”,建立一个线程(线程类名为carThread),线程建立一个carJFrame窗口(车辆进入、离开停车场操作程序)模拟车辆进入或离开停车场

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧