问题描述
航班表航班号航班起始日期航班截止日期MU0012015-1-202015-2-10…………折扣表活动起始日期活动截止日期折扣2015-1-12015-1-310.982015-2-12015-2-150.972015-2-162015-4-10.96…………界面想要展示的结果航班号航班起始日期航班截止日期折扣MU0012015-1-202015-1-310.98MU0012015-2-12015-2-150.97…………上面的例子,MU001跨了2个折扣日期段,所以拆成了2条,根据折扣日期拆分了航班日期,享受不同的折扣。如果航班的日期更长的,跨了折扣日期段更多,那拆分的条数也就更多。难点就是我现在不知道,如果判断航班日期跨了哪几个折扣日期段,求大神指点。
解决方案
解决方案二:
select*from航班表,折扣表where活动起始日期<航班截止日期and活动截止日期>航班起始日期
解决方案三:
引用1楼feiyun0112的回复:
select*from航班表,折扣表where活动起始日期<航班截止日期and活动截止日期>航班起始日期
你这肯定不对啊,就算折扣关联正确,但航班日期并没有拆分开来
解决方案四:
casethenend。。。应该可以吧
解决方案五:
不一定要用sql实现,用c#也行,只要前台能获得这个结果就行我是想用DataTable,遍历DataRows去实现,但不知道这个日期判断的逻辑怎么写
解决方案六:
所有时间你都得到了还做不出来吗?max(活动起始日期,航班起始日期)min(活动截止日期,航班截止日期)
解决方案七:
嘿,LZ携程的么?
解决方案八:
引用5楼feiyun0112的回复:
所有时间你都得到了还做不出来吗?max(活动起始日期,航班起始日期)min(活动截止日期,航班截止日期)
我不知道是我没理解你,还是你没理解我。。。如我上面的MU001例子,原本航班日期是2015-1-202015-2-10跨了2个折扣日期段,所以将航班日期拆成了2条记录。一条是2015-1-202015-1-310.98一条是2015-2-12015-2-150.97航班日期是被截断改变了的,以符合折扣日期
解决方案九:
结果:是这样么?
解决方案十:
引用8楼wuhailin010的回复:
结果:是这样么?
意思是这个意思,但是你这么写有问题。你的测试数据航班跨了所有的折扣段,如果只跨了2个日期段呢?你把航班日期改成2015-2-10试试,应该还关联出4条吧,正确应该是2条。我觉得sql是很难完成这个需求的,还是要写代码
解决方案十一:
sql是可以改的嘛。。。