SQL max函数与另一个条件不起作用

时间:2014-07-30 08:15:30

标签: sql max

这是完美的,直到订单进入,其中stationID不是= 2。我的逻辑是sql搜索两个条件满足并显示那些结果,而不是查看timeplaced的最大值,如果stationid不= 2则不显示它正在做什么。

SELECT OrderNo 
FROM   Orders 
WHERE  TimePlaced = (SELECT max(TimePlaced) FROM Orders) 
       AND StationID=2

1 个答案:

答案 0 :(得分:1)

将您的条件添加到内部选择中

SELECT OrderNo 
FROM   Orders 
WHERE  TimePlaced = 
       (
           SELECT max(TimePlaced) 
           FROM   Orders 
           WHERE  StationID=2
       ) 
       AND StationID=2

但是如果你不想两次添加条件,那么只需将内部选择与外部选择“链接”:

SELECT OrderNo 
FROM   Orders O
WHERE  TimePlaced = 
       (
           SELECT max(TimePlaced) 
           FROM   Orders 
           WHERE  StationID=O.StationID
       ) 
       AND StationID=2

您可以尝试的另一种方法是使用CTEROW_NUMBER

;WITH OrdersCTE AS
(
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY StationID ORDER BY TimePlaced Desc) AS rn
    FROM   Orders
)
SELECT * 
FROM   OrdersCTE 
WHERE  rn = 1
       AND StationID = 2