date - 查找日期范围内某个日期的所有实例 - SQL Server
问题描述
我需要在日期范围内查找每个财政年度结束日期的商品价格。在这种情况下,财政年度是例如 3 月 31 日
我的表例如:
物品编号 | 价值 | 日期从 | 日期至 |
---|---|---|---|
1 | 10 | '2019/01/01' | '2021/02/28' |
1 | 11 | '2021/03/01' | '2021/05/01' |
因此,SQL 将导致上表为:
物品编号 | 价值 | 日期从 | 日期至 |
---|---|---|---|
1 | 10 | '2019/01/01' | '2019/03/30' |
1 | 10 | '2020/03/31' | '2021/02/28' |
1 | 11 | '2020/03/01' | '2021/03/30' |
1 | 11 | '2020/03/31' | '2021/05/01' |
解决方案
接受的答案是不正确的,因为它没有拆分一年中具有不同value
s 的不同部分。
你也不需要一张Year
桌子,尽管它可能是有益的。您可以使用VALUES
表格即时生成它。
还要注意检查间隔重叠的更好方法,使用AND
notOR
WITH Years AS (
SELECT
YearStart = DATEFROMPARTS(v.yr, 3, 31),
YearEnd = DATEFROMPARTS(v.yr + 1, 3, 31)
FROM (VALUES
(2015),(2016),(2017),(2018),(2019),(2020),(2021),(2022),(2023),(2024),(2025),(2026),(2027),(2028),(2029),(2030),(2031),(2032),(2033),(2034),(2035),(2036),(2037),(2038),(2039)
) v(yr)
)
SELECT
i.ItemID,
i.Value,
DateFrom = CASE WHEN i.DateFrom > y.YearStart THEN i.DateFrom ELSE y.YearStart END,
DateTo = CASE WHEN i.DateTo > y.YearEnd THEN y.YearEnd ELSE i.DateTo END
FROM items i
JOIN Years y ON i.DateFrom <= y.YearEnd
AND i.DateTo >= y.YearStart;
推荐阅读
- javascript - 在没有开发依赖的 Svelte 中使用 Glider
- php - 自定义注册页面不输出任何错误消息
- python - 如何使用命令行导入模块?
- python - 如何在 python 中使用 BeautifulSoup 从以下链接返回日期和标题
- r - r中两个数据集的散点图
- python - 打开命令是否(或不)锁定文件?
- apache - 使用 Let's encrypt with Apache 和 Apache Tomcat
- python - 如何确定python中变量的类型?
- android - 将 firestore firebase 放入回收站时为 null
- javascript - API 总是返回 200,响应中没有数据