2

私はこれについて何度も苦労しましたが、うまくいきません。これらのフォーラムに何時間も参加しています... データセット:

行 日付 AccountID 列 1    
1 2013/02/21 0:30 A0M8FA1003YP .       
2 2013/02/21 0:30 A0M8FA1003YP .       
3 2013/02/21 0:30 A0M8FA1003YP .       
4 2007/09/24 12:00 A0M8FA1003YP .       
5 2007/09/24 12:00 A0M8FA1003YP .       
6 2007/09/24 12:00 A0M8FA1003YP .       
7 2009 年 12 月 2 日 12:00 A023123332YP .       
8 2003/09/24 12:00 A023123332YP .       
9 2003/09/24 12:00 A023123332YP .       
10 2003/09/24 12:00 A023123332YP .           

日付列の最大値を返したいのですが、単一の行だけでなく、その最大値に一致するすべての行を返します。つまり、上記のセットでは、行 1、2、3、および 7 (行のすべての列も) を返したいと考えています。

行 日付 AccountID 列 1    
1 2013/02/21 0:30 A0M8FA1003YP .       
2 2013/02/21 0:30 A0M8FA1003YP .       
3 2013/02/21 0:30 A0M8FA1003YP .   
7 2009 年 12 月 2 日 12:00 A023123332YP .       

何千もの行があり、各 ACCOUNTID に対して返される一致する行の数は、1 つ、2 つ、10 などさまざまです。助けてください!!!

更新 これも試しました

Select max(ASS_SCH_DATE) over (partition by AccountID), 
       AccountID, 
       ASS_SCH_DATE, 
       ACCOUNTID 
from #Temp3 
order by #Temp3.ACCOUNTID 

結果にはまだ余分な行が表示されます。

(列名なし) ASS_SCH_DATE ACCOUNTID
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2013-02-21 00:30:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2007-09-24 12:00:00.000 A0M8FA1003YP
2013-02-21 00:30:00.000 2007-09-24 12:00:00.000 A0M8FA1003YP
4

6 に答える 6

8

クエリ:

SQLFIDDLE例

SELECT t1.*
FROM Table1 t1
WHERE t1.Date = (SELECT MAX(t2.Date)
                 FROM Table1 t2
                 WHERE t2.AccountID = t1.AccountID)

結果:

| ROW |                            DATE |    ACCOUNTID |
--------------------------------------------------------
|   1 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   2 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   3 | February, 21 2013 00:30:00+0000 | A0M8FA1003YP |
|   7 | February, 12 2009 12:00:00+0000 | A023123332YP |
于 2013-06-17T06:09:09.920 に答える
1
select * from table where date in (select max(date) from table)
于 2013-06-17T05:33:35.440 に答える
0

簡単...

あなたのテーブルを「ダミー」にして、私は次のように書きます:

SELECT dummy.*
FROM
  (
      SELECT MAX(Date) Date, AccountID
      FROM dummy
      GROUP BY AccountID
  ) max_date
    INNER JOIN dummy
    ON(
          dummy.Date      = max_date.Date
      AND dummy.AccountID = max_date.AccountID
    )

または、最新のより意味論的な構文を使用します。

WITH max_date(Date, AccountID)
AS
(
  SELECT MAX(Date) Date, AccountID
  FROM dummy
  GROUP BY AccountID
)
SELECT dummy.*
FROM
  max_date
    INNER JOIN dummy
    ON(
          dummy.Date      = max_date.Date
      AND dummy.AccountID = max_date.AccountID
    )
于 2013-06-17T06:38:55.313 に答える
0

ランクを使用してみてください:

SELECT  AccountID, 
        ASS_SCH_DATE, 
        RANK() OVER (PARTITION BY ASS_SCH_DATE ORDER BY AccountID) DateRank
FROM YourTable
WHERE DateRank = 1

このようにして、最高ランク、2 番目に高いランクなどを選択することもできます...

于 2013-06-17T06:03:38.837 に答える
0

Windows 関数は、探しているものです。

Select row,max(date) over (partition by AccountID) As max_date, AccountID, 
Column1 from table where max_date = date;
于 2013-06-17T05:47:09.913 に答える