-2

私は次のようなテーブルを持っています

Product Id   Status          Date
1            Ordered         01/02/1999
1            Leased          02/04/2001
1            SubLeased       12/31/2000
1            Cancelled       10/25/2003

単一のクエリで、その製品のすべてのレコードと max(date) を表示する必要があります。結果は次のようになります

ProductId    Status          Date          Max(date)
1            Ordered         01/02/1999    10/25/2003
1            Leased          02/04/2001    10/25/2003
1            SubLeased       12/31/2000    10/25/2003
1            Cancelled       10/25/2003    10/25/2003
4

2 に答える 2

1

SQL2005+: OVER 句で MAX 集計関数を使用します。

SELECT  t.ProductId, t.Status, t.Date, 
        MAX(t.Date) OVER(PARTITION BY t.ProductId) AS MaxPerProductId
FROM    MySchema.MyTable AS t

例:

SELECT  o.object_id, o.name, o.create_date,
        MAX(o.create_date) OVER() AS MaxCreateDate
FROM    sys.objects o
ORDER BY o.create_date DESC;

結果:

object_id   name                 create_date             MaxCreateDate
----------- -------------------- ----------------------- -----------------------
448720651   Persons              2013-10-19 22:29:37.503 2013-10-19 22:29:37.503
432720594   PK_Invoice_InvoiceID 2013-10-13 21:16:28.287 2013-10-19 22:29:37.503
416720537   Invoice              2013-10-13 21:16:26.560 2013-10-19 22:29:37.503
256719967   MyTable              2013-10-12 23:34:34.260 2013-10-19 22:29:37.503
224719853   spTest               2013-10-03 22:47:50.380 2013-10-19 22:29:37.503
...
于 2013-10-20T12:05:45.680 に答える
0

mysql が以下のステートメントのような場合は、参照できます。

SELECT act.*,(SELECT MAX(a.create_date) maxtime FROM table a) FROM table act ;
于 2013-10-20T13:13:34.240 に答える