以不同的方式排序

Order by with distinct

首先是我的 sql:

SELECT DISTINCT(CarTable.CarPlate), CarTable.CarImage, EventTable.FirstDate
FROM CarTable JOIN EventTable ON CarTable.CarId = EventTable.CarId
ORDER BY 3 DESC

我正在尝试按日期对行进行排序并且效果很好,但我希望所有的盘子只写一次。我的意思是我需要查看所有汽车的最后一个事件,但似乎我使用的明显错误。这样做的最佳方法是什么?

使用MAXGROUP BY:

SELECT 
    c.CarPlate, 
    c.CarImage, 
    FirstDate = MAX(e.FirstDate)
FROM CarTable c
INNER JOIN EventTable e
    ON c.CarId = e.CarId
GROUP BY c.CarPlate, c.CarImage
ORDER BY MAX(e.FirstDate) DESC

注:

  • 使用有意义的别名来提高可读性。

或者 window 和 DISTINCT:

SELECT DISTINCT 
  C.CarId,
  C.CarImage, 
  MAX(E.FirstDate) OVER (PARTITION BY E.CarId) FirstDate
FROM CarTable C
JOIN EventTable E ON C.CarId = E.CarId
ORDER BY FirstDate DESC

看看,如果不使用聚合函数,这是否有效。

SELECT c.CarPlate
    ,c.CarImage
    ,ev.FirstDate
FROM CarTable C
CROSS APPLY (
    SELECT max(FirstDate) FirstDate
    FROM EventTable E
    WHERE c.CarId = e.CarId
    ) ev
ORDER BY ev.FirstDate DESC