gpt4 book ai didi

MySQL根据另一列创建日期范围

转载 作者:行者123 更新时间:2023-11-29 03:07:58 24 4
gpt4 key购买 nike

我有一个如下所示的日历表:

    date   |  qty
-------------------
1998-11-18 | 2
1998-11-19 | 0
1998-11-20 | 0
1998-11-21 | 0
1998-11-22 | 3
1998-11-23 | 0
1998-11-24 | 0
1998-11-25 | 3

我正在尝试生成一份报告,该报告将给出数量为 0 值 (qty) 的条目范围。我不能对日期进行硬编码,它们需要由第二列的值来确定。从上面看,报告应该是这样的:

1998-11-19 - 1998-11-21  
1998-11-23 - 1998-11-24

所有 GROUP BYUNION 查询都为我提供了各个条目,但我不知道如何创建日期范围。

最佳答案

假设表名是 calendar,下面的查询完成了这项工作:

SELECT 
MIN(t.date),
MAX(t.date)
from
(SELECT
c.date,
MAX(prev.date) mindat,
MIN(next.date) maxdat
FROM
calendar c,
calendar prev,
calendar next
WHERE
c.qty = 0 AND
c.date > prev.date AND prev.qty != 0 AND
c.date < next.date AND next.qty != 0
GROUP BY
c.date) t
GROUP BY
mindat, maxdat

在内部查询中,我们基本上将 calendar 表连接到自身两次:第一次连接(c 表到 prev 表)选择最大日期,即小于每个 c 表行的日期。这给了我们行所属的间隔的开始。第二个连接选择以相同方式结束的间隔。

外部查询从间隔中提取最小和最大日期。

我用你的数据测试了查询,这里是输出:

min(t.date) max(t.date)
1998-11-19 1998-11-21
1998-11-23 1998-11-24

关于MySQL根据另一列创建日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12549756/

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