【发布时间】:2015-07-27 18:49:28
【问题描述】:
我最近遇到了一个问题,似乎无法使用 SQL(或其他方式)找到一个好的解决方案。我有一张像下面这样的表格
uid | event | start_date | end_date
1 A 23/07/2014 NULL
1 B 25/07/2014 NULL
1 C 26/08/2014 NULL
1 A NULL 25/07/2014
2 A 23/07/2014 NULL
2 C 19/09/2014 NULL
2 B 13/10/2014 NULL
2 A NULL 25/10/2014
2 B 12/09/2014 NULL
对于每个用户(由唯一的用户 ID uid 给出),如果相同的事件被触发的 start_date 小于或等于,我希望有另一列的值为 1到end_date。对于上面的示例,我们会将结果表作为
uid | event | start_date | end_date | triggered
1 A 23/07/2014 NULL 1
1 B 25/07/2014 NULL 0
1 C 26/08/2014 NULL 0
1 A NULL 25/07/2014 1
2 A 28/11/2014 NULL 0
2 C 19/09/2014 NULL 0
2 B 13/10/2014 NULL 1
2 A NULL 25/10/2014 0
2 B NULL 15/11/2014 1
因为对于用户1,事件A 具有start_date <= end_date,因此该事件对应的triggered 值将是1。用户2 也是如此,其中事件B 由给定条件触发。我想出了一个需要自我加入表格的解决方案,但我希望以更好的方式做到这一点并同时学习一些新技术。任何帮助或提示将不胜感激。
【问题讨论】:
-
1) 什么是 order_date ? 2)条件不明确。用户 1 有 4 行。其中 2 个有 A 所以你的查询是 row1's startDate
-
@eranotzap 对这个错误感到抱歉。我现在已经改变了。是的,我的条件是对于相同的
uid和event,如果start_Date <= end_date则两者都应该对应的triggered值应该显示1。 -
为什么你有 2 条记录?为什么不更新第一个 A 的结束时间并为其分配一个触发标志?