我有一个表,在这个表中是PostDate和OrderNo以及一堆其他字段。我想获得所有最新的PostDates,然后与那些PostDates获得最大的OrderNo。然后我想显示一行显示PostDate和OrderNo。
到目前为止我在下面。这显示了昨天所有带有postdates的行,现在我想只显示那些PostDates中最大的OrderNo。我尝试使用嵌套选择,但我无法绕过它。任何聪明的想法?
SELECT OrderNo, PostDate
FROM table
WHERE PostDate = (SELECT MAX(PostDate) FROM table
答案 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)