簡體   English   中英

T-SQL:按日期排序,然后分組?

[英]T-SQL: Sorting by date, then grouping?

假設我有一個如下所示的數據庫表:

ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ------
          1 Jason            40420 1994-02-01 00:00:00.000 New York   W
          2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N
          3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W
          4 Linda            40620 1997-11-04 00:00:00.000 New York   N
          5 David            80026 1998-10-05 00:00:00.000 Vancouver  W
          6 James            70060 1999-09-06 00:00:00.000 Toronto    N
          7 Alison           90620 2000-08-07 00:00:00.000 New York   W
          8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N
          9 Mary             60020 2002-06-09 00:00:00.000 Toronto    W

是否可以通過start_date降序對其進行排序,然后通過最新的start_date對每個城市組進行排序? 例如:

ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ------
      9 Mary             60020 2002-06-09 00:00:00.000 Toronto    W
      6 James            70060 1999-09-06 00:00:00.000 Toronto    N
      3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W
      8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N
      5 David            80026 1998-10-05 00:00:00.000 Vancouver  W
      2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N
      7 Alison           90620 2000-08-07 00:00:00.000 New York   W
      4 Linda            40620 1997-11-04 00:00:00.000 New York   N
      1 Jason            40420 1994-02-01 00:00:00.000 New York   W

謝謝您的回復。

在SQL Server 2005或更新版本可能是這樣的:

select 
  * 
from
  (select *,max(start_date) over(partition by city) max_date from tablename) alias
order by max_date desc, start_date desc
SELECT yourTable.*
  FROM yourTable INNER JOIN
      (SELECT city, MAX(start_date) AS max_city_date 
         FROM yourTable 
        GROUP BY city) max_dates
      ON yourTable.city = max_dates.city
ORDER BY max_dates.max_city_date DESC, yourTable.city, yourTable.start_date DESC

如果兩個城市具有相同的yourTable.city ,則ORDER BY子句中的yourTable.city可確保按城市進行一致的分組。

加入查詢本身,並按城市名稱分組。 然后,您可以在ORDER BY子句中使用城市的最大開始日期。

select c1.*
from cities c1
left join cities c2 on c1.city = c2.city
group by c1.id, c1.name, c1.salary, c1.start_date, c1.city, c1.region
order by max(c2.start_date) desc, c1.city, c1.start_date desc

問題不明確......但這會產生你列出的表格:

select *
from MyTable p
order by 
    (SELECT MAX(start_date) AS max_city_date FROM MyTable WHERE city=p.city) desc, 
    city, 
    start_date desc

那是你要的嗎?? 如果可以,請給我一些指示。

ID          name       salary      start_date              city       region
----------- ---------- ----------- ----------------------- ---------- ----------
9           Mary       60020       2002-06-09 00:00:00.000 Toronto    W
6           James      70060       1999-09-06 00:00:00.000 Toronto    N
3           Celia      24020       1996-12-03 00:00:00.000 Toronto    W
8           Chris      26020       2001-07-08 00:00:00.000 Vancouver  N
5           David      80026       1998-10-05 00:00:00.000 Vancouver  W
2           Robert     14420       1995-01-02 00:00:00.000 Vancouver  N
7           Alison     90620       2000-08-07 00:00:00.000 NewYork    W
4           Linda      40620       1997-11-04 00:00:00.000 NewYork    N
1           Jason      40420       1994-02-01 00:00:00.000 NewYork    W

試試這個:

SELECT * 
FROM
    (
    SELECT 
        *,
        (SELECT MAX(start_date) FROM cities c2 WHERE c1.city = c2.city) AS latest_start_date
    FROM cities c1
    )
ORDER BY latest_start_date DESC, start_date DESC

內部查詢會給你這樣的東西:

ID          name       salary      start_date              city       region lastest_start_date
----------- ---------- ----------- ----------------------- ---------- ------ -------------------
          1 Jason            40420 1994-02-01 00:00:00.000 New York   W      2000-08-07 00:00:00.000
          2 Robert           14420 1995-01-02 00:00:00.000 Vancouver  N      2001-07-08 00:00:00.000
          3 Celia            24020 1996-12-03 00:00:00.000 Toronto    W      2002-06-09 00:00:00.000
          4 Linda            40620 1997-11-04 00:00:00.000 New York   N      2000-08-07 00:00:00.000
          5 David            80026 1998-10-05 00:00:00.000 Vancouver  W      2001-07-08 00:00:00.000
          6 James            70060 1999-09-06 00:00:00.000 Toronto    N      2002-06-09 00:00:00.000
          7 Alison           90620 2000-08-07 00:00:00.000 New York   W      2000-08-07 00:00:00.000
          8 Chris            26020 2001-07-08 00:00:00.000 Vancouver  N      2001-07-08 00:00:00.000
          9 Mary             60020 2002-06-09 00:00:00.000 Toronto    W      2002-06-09 00:00:00.000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM