如何根据开始日期将记录与日期值一起显示。 SQL Server

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据开始日期将记录与日期值一起显示。 SQL Server相关的知识,希望对你有一定的参考价值。

我有2个表,一个是日期列表,另一个是具有相应开始日期的对象列表。我想加入表格,以便ID出现在日期列表的日期旁边,因为它的开始日期大于或等于对象的开始日期。

 Date List      ID  StartDate           Result  
29/07/2016      1   29/07/2016          Date       ID
31/08/2016      2   29/07/2016          29/07/2016  1
30/09/2016      3   31/08/2016          29/07/2016  2
31/10/2016      4   30/09/2016          31/08/2016  1
30/11/2016      5   30/09/2016          31/08/2016  2
30/12/2016      6   30/09/2016          31/08/2016  3
31/01/2017      7   31/10/2016          30/09/2016  1
28/02/2017      8   31/10/2016          30/09/2016  2
31/03/2017                              30/09/2016  3
28/04/2017                              30/09/2016  4
31/05/2017                              30/09/2016  5
30/06/2017                              30/09/2016  6
31/07/2017                              31/10/2016  1
31/08/2017                              31/10/2016  2
29/09/2017                              31/10/2016  3
31/10/2017                              31/10/2016  4
30/11/2017                              31/10/2016  5
29/12/2017                              31/10/2016  6
31/01/2018                              31/10/2016  7
                                        31/10/2016  8

我不知道如何使用join语句,因为我只有一个参考点,ID可以与日期列表一起加入。因此,我很难让它出现在除开始日期之外的后续日期。

非常感谢

答案

没什么魔力:

SELECT DateList.Date, ObjectList.ID
FROM ObjectList 
  INNER JOIN DateList ON ObjectList.StartDate <= DateList.Date
另一答案

我在这里发布了我的答案我是如何理解你的,但不清楚为什么你的结果不包含大于2016年的日期...

我更改了语言,因为您的日期是依赖于语言的格式,我不想将它们重写为yyyymmdd

set language [British English];

declare @DateList table(dt date);
insert into @DateList values
('29/07/2016'),               
('31/08/2016'),               
('30/09/2016'),               
('31/10/2016'),               
('30/11/2016'),               
('30/12/2016'),                
('31/01/2017'),                
('28/02/2017'),               
('31/03/2017'),                              
('28/04/2017'),                              
('31/05/2017'),                              
('30/06/2017'),                              
('31/07/2017'),                              
('31/08/2017'),                              
('29/09/2017'),                              
('31/10/2017'),                              
('30/11/2017'),                              
('29/12/2017'),                              
('31/01/2018');                              

declare @obj table ( ID int,  StartDate date);
insert into @obj values
(1,   '29/07/2016'), 
(2,   '29/07/2016'), 
(3,   '31/08/2016'), 
(4,   '30/09/2016'), 
(5,   '30/09/2016'), 
(6,   '30/09/2016'),
(7,   '31/10/2016'),
(8,   '31/10/2016');

select l.*, o.id
from @DateList l join @obj o
        on l.dt >= o.StartDate
order by 1;

以上是关于如何根据开始日期将记录与日期值一起显示。 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

如何根据最大值和最小值将一组 SQL 记录转换为单行?

SQL中哪个字段类别记录日期和哪个字段类别记录时间

根据输入参数使用日期时间值自动填充 SQL 表字段

SQL Server:如何根据最近的日期时间检索所有记录

在这种特定情况下,如何使用 SQL 仅检索与日期字段的最后一个值相关的记录?

如何根据 R 中的日期聚合数据?