Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL嵌套的Select语句,最大?_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

SQL嵌套的Select语句,最大?

SQL嵌套的Select语句,最大?,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我有一个表,在这个表中有PostDate和OrderNo以及一系列其他字段。我想得到所有最新的日期,然后用这些日期得到最大的订单号。然后我想显示一行,其中显示了PostDate和OrderNo 到目前为止,我在下面。这显示了从昨天开始的所有带有postdates的行,现在我只想显示这些postdates中最大的OrderNo。我试着使用嵌套的select,但我无法将我的头缠绕在它周围。有什么好主意吗 SELECT OrderNo, PostDate FROM table WHERE P

我有一个表,在这个表中有PostDate和OrderNo以及一系列其他字段。我想得到所有最新的日期,然后用这些日期得到最大的订单号。然后我想显示一行,其中显示了PostDate和OrderNo

到目前为止,我在下面。这显示了从昨天开始的所有带有postdates的行,现在我只想显示这些postdates中最大的OrderNo。我试着使用嵌套的select,但我无法将我的头缠绕在它周围。有什么好主意吗

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

如果您使用的是支持排名的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

解决此问题的最简单方法是将
WHERE
MAX
一起删除,对行进行排序,使所需的行位于顶部,并将输出限制为一行

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

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

对于
MS-SQL
使用
TOP 1
Order by
类似的内容

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

你想怎么做?根据你的描述,我想会的。这将列出每个日期的最大订单。或者,根据我对规范的解释(我正试图对措辞进行理解),这可能会做到:

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

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

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

抱歉,是MSSQL 2014I收到此错误,Msg 1033,级别15,状态1,第38行ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。@David这很奇怪。您是单独使用此查询,还是在某个更大的语句中使用此查询?您是否完全按照原样复制了它,包括
TOP 1
部分?@David这里有一个。另外,如果OrderNo是增量的,您根本不需要子选择,因为最大的数字也将在max date上。是这样吗?我相信它是基于日期递增的,这会有区别吗?因为它每天从1开始?我不确定,因为我没有设计这个系统,我相信它每年从一些数字开始,或者在这个公司的财务周期开始。啊,好吧,如果你不能相信OrderNo是传统的增量查询,那么上面使用max-sub-select的查询可能是最简单的方法。第一种方法不起作用,它向我显示了大量数据。我没有试第二个。
SELECT MAX(OrderNo), MAX(PostDate)
FROM    table
WHERE   PostDate = (SELECT MAX(PostDate) FROM table)