SQL:查找锁定日期的棘手问题

时间:2018-12-05 18:43:06

标签: sql netezza

希望您能提供帮助。我们有一个包含两列Customer_ID和Trip_Date的表。客户在首次访问时以及在过去30天内未收到15%优惠的每次访问中均可享受15%的折扣。我该如何编写一个SQL查询来查找客户全天获得15%折扣的?

桌子看起来像这样

+-----+-------+----------+
| Customer_ID | date     |
+-----+-------+----------+
|          1  | 01-01-17 |
|          1  | 01-17-17 |
|          1  | 02-04-17 |
|          1  | 03-01-17 |
|          1  | 03-15-17 |
|          1  | 04-29-17 |
|          1  | 05-18-17 |
+-----+-------+----------+

所需的输出如下所示:

+-----+-------+----------+--------+----------+
| Customer_ID | date     | received_discount |
+-----+-------+----------+--------+----------+
|          1  | 01-01-17 |        1          |
|          1  | 01-17-17 |        0          |
|          1  | 02-04-17 |        1          |
|          1  | 03-01-17 |        0          |
|          1  | 03-15-17 |        1          |
|          1  | 04-29-17 |        1          |
|          1  | 05-18-17 |        0          |
+-----+-------+----------+--------+----------+

我们正在Netezza从事这项工作。我无法想到仅使用窗口函数,仅使用递归和循环的方法。我缺少一些聪明的把戏吗?

预先感谢, GF

1 个答案:

答案 0 :(得分:0)

您没有告诉我们您的后端是什么,也没有提供示例数据和预期的输出,也没有给出合理的数据模式:(这是一个基于猜测的示例,使用postgreSQL作为后端(太混乱了作为评论): (我认为行程表中有Customer_Id,Trip_Date和LocationId吗?)

select * from trips t1
where not exists (
  select * from trips t2 
  where t1.Customer_id = t2.Customer_id and
  t1.Trip_Date > t2.Trip_Date 
  and t1.Trip_date - t2.Trip_Date < 30
);