Sql选择Statement Issue by order by

Ron*_*jon 3 sql linq sql-server

我有一组记录排序(Order BY)ProductDesc,RecDate,然后是ProductBrand,它给出了以下结果.

- >> SQL是

SELECT RecDate, ProductDesc,ProductBrand
FROM MyTable i
Order BY i.ProductDesc, i.RecDate,i. ProductBrand
Run Code Online (Sandbox Code Playgroud)

-

RecDate     ---     ProductDesc                ---       Brand
--------------------------------------------------------------
2017-07-15      ---     TOMATO ROMA              ---      (S & S)
2017-07-16      ---     TOMATO ROMA              ---      (A & B)
2017-07-17      ---     TOMATO ROMA              ---      (C & D)
2017-07-18      ---     TOMATO ROMA              ---      (AAA)
2017-07-25      ---     TOMATO ROMA              ---      (C & D)
2017-07-26      ---     TOMATO ROMA              ---      (C & D)
Run Code Online (Sandbox Code Playgroud)

但我的要求是在ASC中显示按ProductDesc,RecDate排序的这些记录,然后如果有相同品牌的同一产品(如'TOMATE ROMA(C&D)')但具有不同的接收日期,则需要将这些记录分组一起.排序后的数据应如下所示

    RecDate     ---     ProductDesc                ---       Brand
----------------------------------------------------------------
2017-07-15      ---     TOMATE ROMA              ---      (S & S)
2017-07-16      ---     TOMATE ROMA              ---      (A & B)
2017-07-17      ---     TOMATE ROMA              ---      (C & D)
2017-07-25      ---     TOMATE ROMA              ---      (C & D)
2017-07-26      ---     TOMATE ROMA              ---      (C & D)
2017-07-18      ---     TOMATE ROMA              ---      (AAA)
Run Code Online (Sandbox Code Playgroud)

有什么建议我怎么能这个?注意:我正在使用SQL SERVER,并运行sql填充dataTable,并使用此数据表填充datagridview.

Gor*_*off 5

您希望按品牌的最短日期排序.您可以在order by子句中使用窗口函数来执行此操作:

select RecDate, ProductDesc, ProductBrand
from MyTable i
order by i.ProductDesc,
         min(i.RecDate) over (partition by i.ProductBrand),
         i.ProductBrand,
         i.RecDate;
Run Code Online (Sandbox Code Playgroud)