0

基本的に、table1とtable2の2つのテーブルがあります

これらは、これらのテーブルの出力です。

 This is the sample output of table1,
   ID        PDATE
   4    2013-04-16T17:47:49
   4    2013-04-16T17:36:40
   5    2013-04-16T17:58:23
   5    2013-04-16T17:37:47
   11   2013-04-17T17:51:28
   5    2013-04-17T18:10:28
   4    2013-04-17T18:10:14
   11   2013-04-17T17:39:11

 This is the sample output of table 2,
   ID          RDATE
    4   2013-04-16T17:42:58
    5   2013-04-16T17:55:22
    5   2013-04-19T17:31:07
    5   2013-04-19T17:16:03
    5   2013-04-19T17:00:50
    4   2013-04-19T17:06:34
    17  2013-04-19T17:57:32

これらのテーブルを結合して、1 週間で 1 日あたりの ID 数の数の出力を取得したかったのです。両方の出力の日付列は日付 + 時間であるため (時間部分は無視できますが、日付部分のみを考慮してください)

私の期待される出力は、

    ID        COMBINEDDATE
     2         2013-04-16
     3         2013-04-17
     0         2013-04-18
     3         2013-04-19

上記の出力は、2 つのテーブル出力に基づいています。

注 : 同じ ID が両方のテーブルに同じタイム スタンプ (時刻の部分は無視) で存在する場合、同じ日に同じ ID の複数のエントリが存在する場合でも、このカウントは 1 と見なされます。

4

1 に答える 1

0

これが実際のデモです

クエリ:

  ;with 
  Datas(ID, PDate) as
   (
      select ID, cast(convert(varchar, PDate, 101) as datetime) PDate
      from TableA
      union all
      select ID, cast(convert(varchar, PDate, 101) as datetime) PDate
      from TableB
    ),
  Dates(PDate, MaxPDate) as
    (
      select min(PDate) PDate, max(PDate) MaxPDate
      from Datas
      union all
      select PDate + 1 PDate, MaxPDate
      from Dates
      where
        (PDate + 1) <= MaxPDate
    )
  select count(distinct ID), convert(varchar, Dates.PDate, 101) PDate
  from 
    Dates
    left join Datas on Dates.PDate = Datas.PDate
  group by Dates.PDate
  order by 2    
于 2013-07-11T18:23:34.130 に答える