左边连接两个表,基于时间

时间:2017-01-21 16:15:45

标签: sql sql-server sql-server-2008

我正在积累数据,基于一天30分钟,客户在这一天进行交易。  我有两张桌子,第一张显示客户一整天的行为。第二个表格仅显示晚上的客户行为。 我想基于时间对两个表进行左连接: 这有可能吗? 实际上,我试图这样做,但我在两个表之间得到了重复或交叉产品。

注意:我可以在两个表之间进行左连接,但不是基于时间的。

这里澄清了表格

表1

es2015

表2仅限夜间交易:

Time_Minutes_Based|User_Id|Total_Of_Transactions|Total_of_outgOing
10:00:30          |   1   |           4         |         9
10:00:30          |   2   |          12         |         5
10:01:30          |   6   |           3         |         2
.                 |       |                     |
.                 |       |                     |
.                 |       |                     |
00:01:30          |   8   |           7         |         3

预期表:

Time_Minutes_Based|User_Id|Total_Of_Transactions_at_Night|Total_of_outgoing_at_Night
00:00:30          |   9   |                0             |              6
00:06:30          |   8   |                3             |              3
00:06:30          |   3   |                4             |              0
.                 |       |                              |
.                 |       |                              |
.                 |       |                              |
05:59:00          |   2   |                9             |              3

1 个答案:

答案 0 :(得分:0)

这应该有效,但是整天表和NightOnly表的Time_Minutes_Base必须匹配100%。

00:00:30 <> 00:00:31


select 
      wd.Time_Minutes_Based
    , wd.User_Id
    , wd.Total_Of_Transactions
    , wd.Total_of_outgOing
    , no.Total_Of_Transactions_at_Night
    , no.Total_of_outgoing_at_Night
from
    WholeDay wd
    left join NightOnly no
where
    wd.UserId = no.UserId
    wd.Time_Minutes_Based = no.Time_Minutes_Based;

如果您需要确保查询返回所有记录,则采用另一种方法。

select 
      Time_Minutes_Based
    , User_Id
    , Total_Of_Transactions
    , wd.Total_of_outgOing
    , ''  as Total_Of_Transactions_at_Night
    , ''  as Total_of_outgoing_at_Night
from
    WholeDay
UNION ALL
select 
      Time_Minutes_Based
    , User_Id
    , '' as Total_Of_Transactions
    , '' as Total_of_outgOing
    , Total_Of_Transactions_at_Night
    , Total_of_outgoing_at_Night
from
    NightOnly;