希望您能提供帮助。我们有一个包含两列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
答案 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
);