0

データベースに次の情報があります。

 TO | FROM |    DATE   |  PRICE
AAA |  BBB | 12/3/2012 |  $100
AAA |  CCC | 12/3/2010 |  $200
AAA |  BBB | 10/3/2010 |  $450
BBB |  CCC | 09/7/2010 |  $270
BBB |  AAA | 06/9/2011 |  $130
AAA |  CCC | 12/3/2013 |  $176

最新の TO-FROM ペアを選択するクエリ (できれば LINQ 式) を作成したいので、上記の表に基づいて、クエリで次のデータを返したいと考えています。

 TO | FROM |    DATE   |  PRICE
AAA |  BBB | 12/3/2012 |  $100
BBB |  CCC | 09/7/2010 |  $270
BBB |  AAA | 06/9/2011 |  $130
AAA |  CCC | 12/3/2013 |  $176

これを行う最善の方法は何ですか。

4

1 に答える 1

0

RDBMSについて言及していないので、以下のクエリはほとんどのRDBMSで機能します

SELECT a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT To, FROM, MAX(DATE) maxDate
            FROM tableName
            GROUP BY To, FROM
        ) b ON a.To = b.To AND
                a.FROM = b.FROM AND
                a.DATE = b.maxDATE

ただし、RDBMS をサポートしている場合はCTEWINDOWS FUNCTION

WITH latestRecord AS
(
SELECT [To], [FROM], DATE, Price,
        ROW_NUMBER() OVER (Partition BY [TO], [FROM] ORDER BY date DESC) rn
FROM tableName
)
SELECT [To], [FROM], DATE, Price
FROM latestRecord
WHERE rn = 1

またWINDOWS FUNCTION ONLY

SELECT [To], [FROM], DATE, Price
FROM 
(
    SELECT [To], [FROM], DATE, Price,
            ROW_NUMBER() OVER (Partition BY [TO],[FROM] ORDER BY date DESC) rn
    FROM tableName
) s
WHERE rn = 1

指摘するもう1つのことは、TOややFROM予約済みのキーワードです。使用しているに依存するエスケープ文字でエスケープする必要がありRDBMSます。

于 2012-12-18T01:52:06.250 に答える