gpt4 book ai didi

mysql - 高级 MySQL 查询,用于获取同一表中特定日期的记录

转载 作者:行者123 更新时间:2023-11-29 09:18:10 26 4
gpt4 key购买 nike

我需要找到一种更好、更快速的方法来查询 MySQL 表,以获取给定日期范围内每一天的特定数据,其中表有两个指定开始日期和结束日期的日期列。

表示例:促销栏目:

ID   startDate     EndDate     Discount     CategoryID  
=============================================================
1 2010/08/01 2010/08/10 10.00 A
2 2010/08/01 2010/08/10 15.00 B
3 2010/08/11 2010/08/15 05.00 A
4 2010/08/11 2010/08/15 10.00 B

我知道当给定两个日期范围时,我可以从以下查询中获取比赛促销

SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/15") AND CategoryID = A

上述查询的结果将获取 ID 为 3 的行

但是,如果上述查询中的两个日期范围更改为如下所示

SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND endDate >= "2010/08/18") AND CategoryID = A

我没有得到任何匹配的结果,因为我可以理解逻辑与表中存储的任何数据都不匹配。

这就是为什么,我需要一个更好的解决方案,即使结束日期超过促销的结束日期,我也可以获得匹配的结果。然而,改变逻辑不会给我最好的答案,假设如果我使用以下查询我可以获得结果,但是如果我需要找到日期范围内每天的有效折扣,这也不能解决我的整个问题.

SELECT * FROM Promotions WHERE (startDate <= "2010/08/12" AND CategoryID = A

我需要的真正结果是一种将该查询转换为循环的方法,或者使用内存中的临时 MySQL 表来获取每天的结果,如下所示。

我需要查找日期范围 2010/08/12 至 2010/08/18 的结果

===================================================================
Date Discount
=========================
2010/08/12 05.00
2010/08/13 05.00
2010/08/14 05.00
2010/08/15 05.00
2010/08/16 null
2010/08/18 null

我希望我的疑问和问题得到很好的解释,如果您需要有关此问题的任何进一步说明,请告诉我。

希望看到一个很好的答案。

最佳答案

您需要一个日期日历表,如下所示:

Create Table Calendar ( [Date] DateTime Not Null Primary Key )

该表是静态的,只需填充一次。它将包含每天一行,涵盖您想要查询的任何日期范围。这样,您的查询就更简单了:

Select C.Date, P.Discount
From Calendar As C
Left Join Promotions As P
On C.Date Between P.StartDate And P.EndDate
And P.Category = 'A'

关于mysql - 高级 MySQL 查询,用于获取同一表中特定日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3389239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com