SQL - 使用Max的嵌套选择语句?

时间:2015-03-13 01:43:01

标签: sql sql-server sql-server-2014

我有一个表,在这个表中是PostDate和OrderNo以及一堆其他字段。我想获得所有最新的PostDates,然后与那些PostDates获得最大的OrderNo。然后我想显示一行显示PostDate和OrderNo。

到目前为止我在下面。这显示了昨天所有带有postdates的行,现在我想只显示那些PostDates中最大的OrderNo。我尝试使用嵌套选择,但我无法绕过它。任何聪明的想法?

SELECT OrderNo, PostDate
FROM    table
WHERE   PostDate = (SELECT MAX(PostDate) FROM table

5 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将WHERE完全删除MAX,以这样的方式对行进行排序,使得所需的行位于顶部,并限制输出到一排。

最后一步(将输出限制为一行)取决于SQL版本。以下是在SQL Server中执行此操作的方法:

SELECT TOP 1
    OrderNo, PostDate
FROM My_Table
ORDER BY PostDate DESC, OrderNo Desc

答案 1 :(得分:1)

如果您只想要订单号,可以再次使用MAX,因为您知道由于您的子选择,发布日期也将是MAX:

SELECT MAX(OrderNo), MAX(PostDate)
FROM    table
WHERE   PostDate = (SELECT MAX(PostDate) FROM table)

答案 2 :(得分:0)

如果您使用的是支持排名的RDBMS

WITH C AS(
    SELECT RANK() OVER (ORDER BY OrderNo DESC) AS Rnk
           OrderNo, PostDate
    FROM    table
    WHERE   PostDate = (SELECT MAX(PostDate) FROM table)
)
SELECT * FROM C
WHERE Rnk = 1

答案 3 :(得分:0)

MS-SQL TOP 1使用Order by这样的内容

SELECT TOP 1 OrderNo, PostDate
FROM    table
WHERE   PostDate = (SELECT MAX(PostDate) FROM table
order by OrderNo desc

答案 4 :(得分:0)

确实

SELECT PostDate, Max(OrderNo)
FROM table
GROUP BY PostDate;

做你想做的事?从你的描述,我认为它会。这将列出每个日期的最大订单。或者,取决于我如何解释规范(我试图围绕措辞),这可能会这样做:

SELECT 
    Max(OrderNo) as MaxOrderNoForMaxPostDate,
    (SELECT MAX(PostDate) FROM Table) as MaxPostDate
FROM table
WHERE Postdate = (SELECT Max(PostDate) FROM table)