0

我有两张表,分别称为 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
4

3 回答 3

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
于 2018-05-18T14:55:03.750 回答
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 小提琴

于 2018-05-18T15:18:36.843 回答
0

尝试这样的事情:

select * from tblDaily a join tblWeekly b on a.date1= dateadd(day,-5,b.date2)
于 2018-05-18T14:37:37.360 回答