0

クエリを思い付くのに苦労しています。私はSQLにかなり慣れていないので、ベテランには解決策が明白に見えるかもしれませんが、正直に試してみて、もう考えることができません。Transactionsというテーブルがあり、ID(int)、CustomerID(int)、Amount(int)、およびTransactionDate(日付)の関連する列があります。すべての顧客の最新のトランザクションの合計が必要です。TransactionDateは手動で入力/変更できるため、IDは、その最新の日付に複数のトランザクションがある場合にのみ、セカンダリソートパラメータとして使用されます。

欲求不満になる前に私が持っていたもの:

SUM (
    SELECT  TOP 1 Amount
    FROM    Transactions
    GROUP   BY CustomerID
    ORDER   BY TransactionDate DESC, ID DESC
)

なぜそれが間違っているのか、そしておそらく私が必要としているものにさえ近くないことは知っていますが、それを修正する方法がわかりません。

4

3 に答える 3

3

これを試して:

WITH CTE
AS
(
  SELECT Amount,
    ROW_NUMBER() OVER(PARTITION BY CustomerID
                      ORDER BY TransactionDate DESC, ID DESC) AS RN
  FROM Transactions
)
SELECT SUM(Amount)
FROM CTE
WHERE RN = 1;
于 2013-03-03T06:34:44.520 に答える
0

これを試して

SELECT id, CustomerID, Amount
FROM (
    SELECT 
        id, CustomerID, Amount
        ,rank() over(Partition BY CustomerID ORDER BY TransactionDate,id DESC ) AS Rank 
    from Transactions
) AS a
WHERE a.Rank<=1
于 2013-03-03T06:31:58.150 に答える
0
DECLARE @FromDate DATETIME, @ToDate DATETIME
SELECT @FromDate = '1/1/2009', @ToDate = '1/1/2010'

SELECT SUM(Amount)
FROM    Transactions
WHERE TransactionDate BETWEEN @FromDate AND @ToDate
GROUP   BY CustomerID
ORDER   BY TransactionDate DESC, ID DESC

これはあなたを助けるかもしれません

于 2013-03-03T06:32:12.373 に答える