排序结果的最佳方法是什么?

LON*_*ONG 2 sql t-sql sql-server

例如:

Name         Date
A            2018-06-02
B            2018-06-03
B            2018-06-01
C            2018-06-01
Run Code Online (Sandbox Code Playgroud)

获得最佳方式是什么:

B            2018-06-03
B            2018-06-01
A            2018-06-02
C            2018-06-01
Run Code Online (Sandbox Code Playgroud)

排序顺序首先是Order by Date DESC,然后应该跟随所有记录Name

EzL*_*zLo 5

尝试按每个名称强制最大日期.

IF OBJECT_ID('tempdb..#Data') IS NOT NULL
    DROP TABLE #Data

CREATE TABLE #Data (
    Name VARCHAR(10),
    Date DATE)

INSERT INTO #Data (
    Name,
    Date)
VALUES
    ('A', '2018-06-02'),
    ('B', '2018-06-03'),
    ('B', '2018-06-01'),
    ('C', '2018-06-01')

SELECT
    D.Name,
    D.Date
FROM
    #Data AS D
ORDER BY
    MAX(D.Date) OVER (PARTITION BY D.Name ORDER BY D.Date DESC) DESC,
    D.Date DESC,
    D.Name
Run Code Online (Sandbox Code Playgroud)