gpt4 book ai didi

Mysql Advanced query - Date Range Table to result per day 列

转载 作者:行者123 更新时间:2023-11-30 23:20:56 25 4
gpt4 key购买 nike

我在这里遇到了挑战。

我有一张看起来像这样的表格。

| DayDate    |EndDate    |  Rate  | 
-----------------------------------
| 2013-07-01 |2013-08-05 | 200.00 |
| 2013-08-06 |2013-10-20 | 150.00 |
| 2013-10-21 |2013-12-31 | 130.00 |

我想运行一个查询,该查询应返回给定日期范围内的每日汇率值。例如,我想查询从 2013-08-03 到 2013-08-08 每天的费率,预期结果应该如下所示。

|   From    |   To      |  Day 1  |  Day 2  |  Day 3  |  Day 4  |  Day 5  |
---------------------------------------------------------------------------
|2013-08-03 |2013-08-08 | 200.00 | 200.00 | 150.00 | 150.00 | 150.00 |

在我的项目范围内,添加到该列的天数不会超过30天,通常会平均在3到10天之间。我希望看到一些很酷的想法和产生上述结果的有效方法。

更新

为避免混淆日期列,日期列将由查询期间之间的天数生成。

谢谢。

最佳答案

假设:您有一个静态日历表,包含一列 DAY_DT 和每个日期一行。我在示例中将其命名为 CAL_DAY,因为它与我们在数据仓库中使用的名称相同。

对于以下查询,您只需在主查询中添加新的 MAX() 列,以及更多 CASE 语句来扩展您的查询以反射(reflect)更大的范围。

SELECT MAX(MIN_DAY_DT), 
MAX(MAX_DAY_DT),
MAX(D1) AS "Day 1",
MAX(D2) AS "Day 2",
MAX(D3) AS "Day 3",
MAX(D4) AS "Day 4",
MAX(D5) AS "Day 5"
FROM(
SELECT cmin.DAY_DT AS MIN_DAY_DT,
cmax.DAY_DT AS MAX_DAY_DT,
CASE WHEN cd.DAY_DT = cmin.DAY_DT + 1 THEN rt.Rate ELSE 0 END AS "D1",
CASE WHEN cd.DAY_DT = cmin.DAY_DT + 2 THEN rt.Rate ELSE 0 END AS "D2",
CASE WHEN cd.DAY_DT = cmin.DAY_DT + 3 THEN rt.Rate ELSE 0 END AS "D3",
CASE WHEN cd.DAY_DT = cmin.DAY_DT + 4 THEN rt.Rate ELSE 0 END AS "D4",
CASE WHEN cd.DAY_DT = cmin.DAY_DT + 5 THEN rt.Rate ELSE 0 END AS "D5"
FROM CAL_DAY cd
JOIN CAL_DAY cmin
ON (cd.DAY_DT >= cmin.DAY_DT)
JOIN CAL_DAY cmax
ON (cd.DAY_DT <= cmax.DAY_DT)
LEFT JOIN RateTable rt ON
(cd.DAY_DT BETWEEN rt.DayDate AND rt.EndDate)
WHERE cmin.DAY_DT = '2013-08-03'
AND cmax.DAY_DT = '2013-08-08')

关于Mysql Advanced query - Date Range Table to result per day 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15476483/

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