车辆排班表问题。头都想大了也不知道如何实现。
(1) 数据库原始数据
主键:不重复,派团编号:会重复(车是跟团走的),车牌号码:会重复(也可以看做车id值)。时间:在这个日期执行了运输任务。
下面的数据表示是车辆每天的日程安排。例如:
主键为id00 ~ id03的数据表示的意思是:云AL2203在2月11日到7月14日运输了派团编号为 ynkmd 的货物。
主键为id05 ~ id09的数据表示的意思是:云AL2203在2月14日到7月18日运输了派团编号为 MK-3的货物。
图一
CREATE TABLE [dbo].[行程表L]([主键] NVARCHAR(50) PRIMARY KEY NOT NULL
,[派团编号] NVARCHAR(50) NULL
,[车牌号] NVARCHAR(50) NULL
,[标题] NVARCHAR(50) NULL
,[时间] DATE NULL
)
INSERT INTO [dbo].[行程表L]([主键],[派团编号],[车牌号],[标题],[时间])
VALUES('ID00','YnkMd','云AL2203','第1天','2016/02/11')
,('ID01','YnkMd','云AL2203','第2天','2016/02/12')
,('ID02','YnkMd','云AL2203','第3天','2016/02/13')
,('ID03','YnkMd','云AL2203','第4天','2016/02/14')
,('ID05','MK-3','云AL2203','第1天','2016/02/14')
,('ID06','MK-3','云AL2203','第2天','2016/02/15')
,('ID07','MK-3','云AL2203','第3天','2016/02/16')
,('ID08','MK-3','云AL2203','第4天','2016/02/17')
,('ID09','MK-3','云AL2203','第5天','2016/02/18')
,('ID10','Y-36','云AL2203','第1天','2016/02/18')
,('ID12','Y-36','云AL2203','第2天','2016/02/19')
,('ID13','Y-36','云AL2203','第3天','2016/02/20')
,('ID20','BJ5','云AL2203','第1天','2016/02/13')
,('ID21','BJ5','云AL2203','第2天','2016/02/14')
,('ID22','BJ5','云AL2203','第3天','2016/02/15')
,('ID23','BJ5','云AL2203','第4天','2016/02/16')
,('ID24','JD-1','云AL2203','第1天','2016/02/16')
,('ID25','JD-1','云AL2203','第2天','2016/02/17')
,('ID26','JD-1','云AL2203','第3天','2016/02/18')
,('ID28','JD-1','云AL2203','第4天','2016/02/19')
,('ID29','M326','贵AL2888','第1天','2016/02/14')
,('ID30','M326','贵AL2888','第2天','2016/02/15')
,('ID31','M326','贵AL2888','第3天','2016/02/16')
,('ID32','M326','贵AL2888','第4天','2016/02/17')
,('ID33','d1','贵AL2888','第1天','2016/02/11')
,('ID34','d1','贵AL2888','第2天','2016/02/12')
,('ID35','d1','贵AL2888','第3天','2016/02/13')
,('ID36','d1','贵AL2888','第4天','2016/02/14')
,('ID37','Y-37','贵AL2888','第1天','2016/02/17')
,('ID38','Y-37','贵AL2888','第2天','2016/02/18')
,('ID39','Y-37','贵AL2888','第3天','2016/02/19')
,('ID40','Y-37','贵AL2888','第4天','2016/02/20')
,('ID41','K324','云AL1314','第1天','2016/02/11')
,('ID42','K324','云AL1314','第2天','2016/02/12')
,('ID43','K324','云AL1314','第3天','2016/02/13')
,('ID44','K324','云AL1314','第4天','2016/02/14')
,('ID45','KMJ02','云AL1314','第1天','2016/02/15')
SELECT [主键],[派团编号],[车牌号],[标题],[时间] FROM [dbo].[行程表L] ORDER BY [车牌号] DESC,[主键] ASC
(2) 我想要的结果如下:
注:下面图中的颜色只是为了观看更直观,用数据无关
如果我检索2月11日到2月12日的日程安排的时候,车牌号码为 云AL2203的排班表只会有一条记录,且YnkMd 在第1行。如下
图二
如果我检索2月11日到2月13日的日程安排的时候,车牌号码为 云AL2203的排班表会有两条记录。且YnkMd 在第1行,BJ5在第2行。如下
图三
如果我检索2月11日到2月15日的日程安排的时候,车牌号码为 云AL2203的排班表会有三条记录。且MK-3在第1行,YnkMd 在第2行,BJ5在第3行,如下
图四
检索2月11日到2月19日的日程安排的时候,车牌号码为 云AL2203的排班表会有4条记录。BJ5 在3行,JD-1 在4行,MK-3 在1行,Y-36 在2行,YnkMd 在2行。如图二
图五
2月16日云AL2203 同时在3个地方出现(MK-3,BJ5,JD-1)
要求是只能用mysql,不能用游标,查询一个月记录表里面会有上万行记录,游标超级慢。
还想过一个办法如果在插入数据的时候计算这条数据所在行,也不行,因为检测日期段不同排班表所出现的行是不相同的。提前做的计算根本没用。
一直想了好几个月都没有好的办法,各位大神能不能帮忙想想办法。
为盼各位大神帮忙答疑解惑,在下感激不尽!!!