Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据按不同对分组的列值选择行?_C#_Sql_Linq - Fatal编程技术网

C# 如何根据按不同对分组的列值选择行?

C# 如何根据按不同对分组的列值选择行?,c#,sql,linq,C#,Sql,Linq,我的数据库中有以下信息: 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 我想编写一个查询(或者最好是LINQ

我的数据库中有以下信息:

 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
我想编写一个查询(或者最好是LINQ表达式)来选择最近的to-FROM对,因此根据上表,我希望在查询中返回以下数据:

 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

最好的方法是什么。

因为您没有提到您的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,则支持
CTE
WINDOWS功能

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功能

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

还有一点需要指出的是,
to
FROM
是一些保留的关键字,它们必须用转义字符转义,转义字符取决于您使用的
RDBMS

谢谢。我也有同样的想法,只是不确定是否有更简单的方法