0

3つの列を持つ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値を示しています

4

3 に答える 3

1

行を追加して次のようなことを行うと、ID列は役に立たないため、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
于 2013-09-18T11:29:18.473 に答える
0

使用している SQL のフレーバーはわかりませんが、すべての日付のテーブルと外部結合を行うことができます。たとえば、'Dates' というすべての日付のテーブルがある場合、次のようにすることができます。

select id, dateTime, balance from table1 t RIGHT JOIN Dates d on t.dateTime = d.dateTime where t.dateTime BETWEEN '1/1/2013' AND '1/5/2013'

于 2013-09-18T11:16:02.303 に答える
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;
于 2013-09-18T11:37:41.327 に答える