0

私はSQL server初心者なので、これが簡単な質問だと思われる場合は申し訳ありません。

サンプルのテーブルを使用してsales.ordersいます。sales.customersTSQL 2012 database

これが間違っていることはわかっていますが、これまでのところ、つなぎ合わせることしかできませんでした

SELECT cust.custid, ord.orderid, ord.orderdate
FROM sales.customers as cust
INNER JOIN sales.orders as ord ON (ord.custid=cust.custid)
AND ord.orderid = (SELECT TOP 1 ord.orderid
                FROM sales.orders
                WHERE cust.custid=ord.custid 
                ORDER BY ord.orderdate DESC);

サブクエリでMAX someoneを使用する必要があるように感じますが、取得するためにそれを記述する方法がわかりません

  1. 各顧客ごとの最新のアイテム
  2. 各月内。
4

1 に答える 1

1

このタイプのクエリではrow_number、特にランキング関数を使用することを好みます。次のクエリは、seqnum を使用して各顧客の月ごとの最新の注文を識別し、これを選択します。

select cust.custid, ord.orderid, ord.orderdate
from sales.customers cust INNER JOIN
     (select o.*,
             ROW_NUMBER() over (partition by custid, yr, mon order by orderdate desc) as seqnum
      from (select o.*, YEAR(o.orderdate) as yr, MONTH(o.orderdate) as mon
            from sales.orders o
           )
     ) ord
     on cust.custid = ord.custid and
        ord.seqnum = 1

あなたのバージョンのクエリでは、月が考慮されていませんでした。

于 2012-12-18T16:19:00.430 に答える