【发布时间】:2016-05-17 20:05:17
【问题描述】:
我有一张客户访问表。
对于每个客户,我想将第一条记录的 post_vst_dt 与第二条记录的 vst_beg_dt 进行比较。
如果第二条访问记录的vst_beg_dt 大于第一条记录的post_vst_dt,则需要选择两条记录,否则必须将第一条记录的post_vst_dt 与第三条记录的vst_beg_dt 进行比较。
基于相同的条件检查,要么必须选择第一条和第三条记录,要么只选择第一条记录。
这需要针对所有客户进行检查,并且每个客户可以进行任意次数的访问。
这可以使用 SQL 或带有循环和游标的 mysql 过程来完成吗?有人可以帮忙吗。
| Visit_ID | Cust_ID | Vst_Beg_Dt | Vst_End_Dt | Post_vst_Dt |
|----------+---------+------------+------------+-------------|
| 445 | 545 | 2015-11-23 | 2015-11-28 | 2016-01-12 |
| 198 | 545 | 2016-01-07 | 2016-01-12 | 2016-02-26 |
| 271 | 545 | 2016-01-19 | 2016-01-29 | 2016-03-14 |
| 841 | 291 | 2015-09-08 | 2015-09-12 | 2015-10-27 |
| 987 | 291 | 2015-12-19 | 2015-12-23 | 2016-02-06 |
| 211 | 291 | 2015-12-26 | 2016-01-06 | 2016-02-20 |
| 122 | 291 | 2016-02-25 | 2016-02-27 | 2016-04-12 |
预期的输出是
| Visit_ID | Cust_ID | Vst_Beg_Dt | Vst_End_Dt |
|----------+---------+------------+------------|
| 445 | 545 | 2015-11-23 | 2015-11-28 |
| 271 | 545 | 2016-01-19 | 2016-01-29 |
| 841 | 291 | 2015-09-08 | 2015-09-12 |
| 987 | 291 | 2015-12-19 | 2015-12-23 |
| 122 | 291 | 2016-02-25 | 2016-02-27 |
“第一”是指每个客户的最小 vst_beg_dt 记录
【问题讨论】:
-
什么记录应该被认为是第一个,什么 - 第二个?
-
为什么 Post_vst_Dt 存储为字符串格式而不是日期?
-
第一条记录是最小 vst_beg_dt 的记录;客户的第一、第二、第三条记录由 vst_beg_dt 排序
-
Post_vst_Dt 日期格式可以更改,在示例中是错误的
-
stackoverflow.com/questions/7745609/… 显示如何找到每个客户的第一行