0

ここで問題があり、この件に関する投稿を理解できませんでした。だからここに私の質問があります:

私のアプリケーションには、次のエンティティがあります。

Customer( CustomerId int, Name varchar(200), Email varchar(100), ...)
Employee (EmployeeId int, Name varchar(200), Email varchar(100), ...)
Sale(SaleId int, CustomerId int, EmployeeId int, SaleDate datetime, ...) Join Table

テーブル内の各顧客の最後の販売を取得するにはどうすればよいですか?

例(サンプルデータ):

Customer:
    1, John Smith, jonh@smith.com, ...
    2, Michael Jackson, michael@jackson.com, ...
    3, Bill Clinton, bill@clinton.com, ...

Employee:
   1, Steve Jobs, steve@jobs.com, ...
   2, Bill Gates, bill@gates.com, ...
   3, Mark Zuckerberg, mark@zuckerberg.com, ...

Sales:
   1, 1 (John Smith), 1 (Steve Jobs), '2013-01-02'
   2, 1 (John Smith), 2 (Bill Gates), '2013-01-11'
   3, 1 (John Smith), 3 (Mark Zuckerberg), '2012-12-25'
   4, 2 (Michael Jackson), 2 (Bill Gates), '2012-11-02'
   5, 2 (Michael Jackson), 1 (Steve Jobs), '2013-01-13'
   6, 3 (Bill Clinton), 3 (Mark Zuckerberg), '2013-01-17'
   7, 3 (Bill Clinton), 2 (Bill Gates), '2011-12-20'

私の結果クエリは、次の結果をもたらす必要があります。

   2, 1 (John Smith), 2 (Bill Gates), '2013-01-11'
   5, 2 (Michael Jackson), 1 (Steve Jobs), '2013-01-13'
   6, 3 (Bill Clinton), 3 (Mark Zuckerberg), '2013-01-17'
4

1 に答える 1

1

を使用していると述べたので、とSQL Serverを使用します。Common Table ExpressionWindow Function

WITH latestRecords
AS
(
    SELECT  SaleId , CustomerId, EmployeeId , SaleDate,
            DENSE_RANK() OVER (PARTITION BY CustomerId
                                ORDER BY SaleDate DESC) RN
    FROM    Sale
)
SELECT  a.SaleId,
        b.Name AS CustomerName,
        c.Name as EmployeeName,
        a.SaleDate
FROM    latestRecords a
        INNER JOIN Customer b
            ON a.CustomerID = b.CustomerID
        INNER JOIN Employee c
            ON a.EmployeeID = c.EmployeeID
WHERE   a.RN = 1
于 2013-01-21T13:38:35.817 に答える