1

以下のサンプルデータがあります(表1):

PKEY   DATE
----   ----
ABC1   2/13
CFG5   1/05
POK9   1/10

私は別のテーブル(table2)からこれらの日付を持っています:

PKEY   REF#   DATE
----   ----   ----
1      ABC1   2/14
2      ABC1   2/20
3      ABC1   3/01
4      CFG5   3/05
5      CFG5   2/10
6      ABC1   2/25

table2 ( REF# ごと)から最大日付を取得し、 table1からの日付とのを取得したいと考えています。以下の結果を示します。

REF#   DIFF   
----   ----
POK9    55
CFG5    54
ABC1    21  [ *note: this is equal to datediff(day,table1.DATE,getdate()) ]

*また、 (上記の例の 3 行目のように) REF# が table2 に存在しない場合は、今日の日付(table1 の日付から差し引かれます) を使用したいと思います。これが理にかなっていることを願っています..不明な点がある場合はお知らせください。すぐに編集できます..

**更新:これは私がこれまでに試したことです..しかしまだ不完全です..大変な作業をありがとう

select t1.[REF#]
from table1 as t1
join table2 as t2
on t1.[REF#] COLLATE DATABASE_DEFAULT = t2.[REF#] COLLATE DATABASE_DEFAULT
4

3 に答える 3

2
WITH recorddates
AS
(
    SELECT  PKEY, REFNo, DATE,
            ROW_NUMBER() OVER (PARTITION BY RefNO
                                ORDER BY DATE DESC) rn
    FROM    table2
)
SELECT  a.PKEY, 
        datediff(day,a.DATE,b.date) 
FROM    table1 a
        INNER JOIN recorddates b
            ON a.PKey = b.RefNo
WHERE   b.rn = 1
于 2013-03-06T07:57:22.890 に答える
1

このようなもの?

select a.pkey
      ,datediff(day, max(a.date), coalesce(max(b.date), getdate())) as diff 
  from table1      a
  left join table2 b on(b.ref# = a.pkey)
 group 
    by a.pkey;

コメント用に編集:次のようにフィルタリングできるはずです:

select a.pkey
      ,datediff(day, max(a.date), coalesce(max(b.date), getdate())) as diff 
  from table1      a
  left join table2 b on(b.ref# = a.pkey)
 group 
    by a.pkey
having datediff(day, max(a.date), coalesce(max(b.date), getdate())) between 110 
                                                                        and 120;

または、次のようにステートメントをラップします。

select *
  from (select a.pkey
              ,datediff(day, max(a.date), coalesce(max(b.date), getdate())) as diff 
          from table1      a
          left join table2 b on(b.ref# = a.pkey)
         group 
            by a.pkey
       )
 where diff between 110 and 120;
于 2013-03-06T08:35:22.297 に答える
1
于 2013-03-06T08:14:33.570 に答える