我有两个表,名为tblDaily和tblWeekly。
所以tblDaily包含每日数据和tblWeekly包含每周五存储的数据。
因此,当每日数据中的日期是星期五时,很容易将每日表加入每周表。
我的问题是,当日期不是星期五时,加入的最佳方式是什么。例如,假设我的日期是2018-05-09(星期三),我想在上个星期五(2018-05-04)加入。这样做的最佳方式是什么?
我读到了一张日历表,这是正确的方法吗?虽然我不确定在这种情况下它会如何起作用?
tblDaily
date val
2018-04-30 2 'mon
2018-05-01 3 'tues
2018-05-02 3 'wed
2018-05-03 3 'thurs
2018-05-04 3 'fri
2018-05-07 2 'mon
2018-05-08 3 'tues
2018-05-09 3 'wed
2018-05-10 3 'thurs
2018-05-11 3 'fri
2018-05-14 3 'mon
tblWeekly
date val
2018-05-04 2 'fri
2018-05-11 3 'fri
答案 0 :(得分:1)
这可能有效:
SELECT
[dailydate] = D.[date],
[dailyval] = D.[val],
[weeklydate] = W.[date],
[weeklyval] = W.[val]
FROM
[tblDaily] AS D
OUTER APPLY (SELECT TOP (1) _W.*
FROM [tblWeekly] AS _W
WHERE _W.[date] <= D.[date]
ORDER BY _W.[date] DESC) AS W;
此查询产生以下结果:
dailydate dailyval weeklydate weeklyval
2018-04-30 2 NULL NULL
2018-05-01 3 NULL NULL
2018-05-02 3 NULL NULL
2018-05-03 3 NULL NULL
2018-05-04 3 2018-05-04 2
2018-05-07 2 2018-05-04 2
2018-05-08 3 2018-05-04 2
2018-05-09 3 2018-05-04 2
2018-05-10 3 2018-05-04 2
2018-05-11 3 2018-05-11 3
2018-05-14 3 2018-05-11 3
答案 1 :(得分:0)
尝试这样的事情:
select * from tblDaily a join tblWeekly b on a.date1= dateadd(day,-5,b.date2)
答案 2 :(得分:0)
试试这个简单的join
:
select *
from tblDaily [d]
--first condition in join is to match firdays exactly
left join tblWeekly [w] on [w].[date] = [d].[date] or
--here you are joining fridays from tblWeekly to last friday before the date in tblDaily
[w].[date] = dateadd(day, -datepart(weekday, [d].[date]) - 1, [d].[date])
这是SQL fiddle。