通过给出开始和结束日期显示日期列表,并根据这些日期获取数据

时间:2013-09-18 11:01:29

标签: sql

我有一个包含三列的SQL表

id,balance,datetime 我希望通过给出持续时间来从表中获取数据。假设我想在2013年1月1日到2013年1月15日之间获取数据。给出的数据表如下:

#id   Datetime  Balance #
1     1/1/2013   1500
2     1/2/2013   2000
3     1/4/2013   1500
4     1/5/2013   2500

现在我希望输出为

#id  Datetime  Balance #
1    1/1/2013   1500
2    1/2/2013   2000
3    1/3/2013    0
4    1/4/2013   1500
5    1/5/2013   2500

我想显示所有日期,如果日期没有余额。它显示O或null值

3 个答案:

答案 0 :(得分:1)

我会删除ID列,因为当你添加额外的行并执行类似的操作时它没用:

set dateformat mdy 

declare @tmpTable table (dates date)

declare @startDate date = '1/1/2013'
declare @endDate date = '1/15/2013'

while @startDate <= @endDate
begin
    insert into @tmpTable (dates) values (@startDate)
    set @startDate = DATEADD(DAY, 1, @startDate)
end

select tmp.dates, yourtable.balance 
from @tmpTable as tmp
left outer join yourTable on yourTable.[Datetime] = tmp.dates
where yourtable.[Datetime] between @startDate and @endDate

答案 1 :(得分:0)

我不确定您使用的是什么样的SQL,但是您可以使用所有日期的表格并对其进行外部联接。例如,如果您有一个名为“日期”的所有日期表,那么您可以这样做:

从table1 t选择id,dateTime,balance t t ttate = D.dateTime的RIGHT JOIN Dates d 其中t.dateTime BETWEEN'1 / 1/2013'和'1/5/2013'

答案 2 :(得分:0)

您可以通过创建一个cte,其中包含日期范围和外部日期之间的日期,并将其与您的表格连接。

with cte as
 (
 select start_date dt
 union all
 select dateadd(dd,1,dt) from cte where dt < end_date
)
select id, cte.dt, balance from cte left outer join yourtable b on cte.dt = b.date;