如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外
Posted
技术标签:
【中文标题】如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外【英文标题】:How to get > 240 days data from today's date in SQL Server, where particular unit key of some records are within and outside 240 days 【发布时间】:2021-06-17 10:27:35 【问题描述】:如何在 SQL Server 中从今天的日期获取 > 240 天(或 8 个月)的数据,其中某些记录的特定 unit_key 在 240 天之内和之外。因此消除这些记录。此表中可用的数据从 2019 年开始并搜索记录从 01.01.2020 (allocation_date) 开始
FL_DATA 表
fl_key | fl_no | allocation_date | unit_key | unit_name |
---|---|---|---|---|
1 | FL/3352 | 02/20/2021 | 54 | A Pradhan |
5 | FL/3374 | 07/14/2020 | 54 | A Pradhan |
8 | FL/3469 | 08/16/2019 | 54 | A Pradhan |
11 | FL/3578 | 06/22/2019 | 54 | A Pradhan |
15 | FL/3670 | 06/15/2020 | 60 | D Raj |
22 | FL/3692 | 04/22/2020 | 60 | D Raj |
9 | FL/3542 | 07/20/2020 | 64 | K Parihar |
33 | FL/3599 | 05/27/2020 | 64 | K Parihar |
46 | FL/3645 | 11/13/2019 | 64 | K Parihar |
48 | FL/3640 | 02/22/2021 | 22 | R Raja |
52 | FL/3724 | 12/28/2020 | 22 | R Raja |
12 | FL/3342 | 03/20/2020 | 22 | R Raja |
13 | FL/3355 | 12/20/2019 | 22 | R Raja |
输出表:
fl_no | unit_key | unit_name |
---|---|---|
FL/3670 | 60 | D Raj |
FL/3692 | 60 | D Raj |
FL/3542 | 64 | K Parihar |
FL/3599 | 64 | K Parihar |
我的可能查询是
选择 fl_no,unit_key,unit_name 来自 FL_DATA 其中 DATEDIFF(day, allocation_date, getdate()) > 240 和 allocation_date>='01/01/2020' 按 unit_key 排序
但在 where 子句中,如果我写 >240 或
在我的表格中,数据从 2018 年开始可用,而我对数据的要求是从 2020 年至今,这就是我提到“allocation_date>='01/01/2020'”的原因
我希望我明白了我的意思并期待确切的查询格式。
【问题讨论】:
你考虑过DATEADD
吗?您尝试过什么,为什么没有成功?
您需要提供更多详细信息。解释采用十几行表并将其压缩为 4 行结果集的逻辑。短语“搜索记录从 01.01.2020 开始”似乎是要包含在某些 WHERE 子句中的过滤器。努力吧!
【参考方案1】:
你去吧:
SELECT T.fl_no,
T.unit_key,
T.unit_name,
DATEDIFF(DAY, T.allocation_date, GETDATE()) AS days_past
FROM FL_DATA AS T
WHERE T.allocation_date >= '2020-01-01'
AND NOT EXISTS
(
SELECT 1
FROM FL_DATA AS Recent
WHERE Recent.allocation_date >= DATEADD(DAY, -240, GETDATE())
AND Recent.unit_key = T.unit_key
)
如果解决了,或者是否需要一些调整,请告诉我
【讨论】:
这个查询绝对可以正常工作。你能显示总数吗?单独列中的天数 我为此请求添加了一个新答案,如果它符合您的期望,请告诉我【参考方案2】:如果您想在单独的列中包含天数,我建议改用 OUTER APPLY:
SELECT T.fl_no,
T.unit_key,
T.unit_name,
unit_key_agg.days_past
FROM FL_DATA AS T
OUTER APPLY
(
SELECT DATEDIFF(
DAY,
MAX(Recent.allocation_date),
GETDATE()
) AS days_past
FROM FL_DATA AS Recent
WHERE Recent.unit_key = T.unit_key
) AS unit_key_agg
WHERE T.allocation_date >= '2020-01-01'
AND unit_key_agg.days_past > 240
这个查询会给你这个结果:
fl_no | unit_key | unit_name | days_past |
---|---|---|---|
FL/3670 | 60 | D Raj | 375 |
FL/3692 | 60 | D Raj | 375 |
FL/3542 | 64 | K Parihar | 340 |
FL/3599 | 64 | K Parihar | 340 |
【讨论】:
此查询运行良好。但我需要每一行 days_past 值,而不是特定 unit_key 的 MAX 值。 我明白了,所以我想第一个答案是一个更好的选择。我编辑了第一个答案 - 添加了 past_days 列。如果可以,请将答案标记为正确答案,谢谢:) 第一个答案符合我的期望并且工作正常。以上是关于如何在 SQL Server 中从今天的日期获取 > 240 天的数据,其中某些记录的特定单元键在 240 天之内和之外的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 5.3 中从 SQL Server 获取多个结果集