SQL:查找锁定日期的棘手问题
Posted
技术标签:
【中文标题】SQL:查找锁定日期的棘手问题【英文标题】:SQL: tricky question for finding lockout dates 【发布时间】:2018-12-05 18:43:06 【问题描述】:希望您能提供帮助。我们有一个包含两列 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
【问题讨论】:
欢迎来到 SO。显示示例数据、示例输出以及您编写的产生错误结果的代码。另外,选择 1 个 RDBMS 作为标签。 您使用的是 mysql 还是 SQL Server?你尝试了什么?并且请将示例 dara 和预期结果发布为格式化文本。 【参考方案1】:您没有告诉我们您的后端是什么,也没有提供一些示例数据和预期输出,也没有提供合理的数据架构:(这是一个基于使用 postgreSQL 作为后端的架构猜测的示例(太混乱了作为评论): (我认为您在 trips 表中有 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
);
【讨论】:
这是一个很好的逻辑,但我认为 OP 想要一个标志而不是一个过滤器。 @GordonLinoff,然后 OP 可以将其更改为更新查询,但是当我编写此 OP 时没有任何架构、示例输出,因此没有要更新的字段。在黑暗的 IOW 中拍摄。以上是关于SQL:查找锁定日期的棘手问题的主要内容,如果未能解决你的问题,请参考以下文章