Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server Where子句覆盖Max()_Sql Server_Tsql - Fatal编程技术网

Sql server Where子句覆盖Max()

Sql server Where子句覆盖Max(),sql-server,tsql,Sql Server,Tsql,我正在执行这个查询,但当我抛出where子句时,它返回的不仅仅是Max id。有没有办法即使使用where子句也只返回最大值 Select ID, Max(saledate), empName, saleStatusCode From saleDatabase Where saleStatusCode In (1, 3, 8, 12, 14, 22) Group By ID, empName, saleStatusCode Order By ID Asc 对不起,我不清楚的家伙…这是一些样本数

我正在执行这个查询,但当我抛出where子句时,它返回的不仅仅是Max id。有没有办法即使使用where子句也只返回最大值

Select ID, Max(saledate), empName, saleStatusCode
From saleDatabase
Where saleStatusCode In (1, 3, 8, 12, 14, 22)
Group By ID, empName, saleStatusCode
Order By ID Asc
对不起,我不清楚的家伙…这是一些样本数据

Create Table #Test
(
  ID int,
  saledate datetime,
  empName varchar(500),
  saleStatusCode int
(

INSERT INTO #TEST VALUES (1, '12/12/2014', 'Joe Joe Joe', 2)
INSERT INTO #TEST VALUES (1, '12/07/2014', 'Mitchell', 2)
INSERT INTO #TEST VALUES (1, '12/10/3014', 'Mark', 1)

Select id, Max(saledate), empName, saleStatusCode
FROM #Test
Where salestatuscode IN (1, 2, 3, 8, 122, 14, 22)
Group by id, empname, salestatuscode
Order By id asc

现在如果你运行它,每个条目都会被返回?我需要返回的是带有maxsaledate的ID,因此我只希望返回第一条记录

你的问题不清楚。你只知道saleDate的最大值是多少?然后试试这个:

Select Max(saledate)
From saleDatabase
Where saleStatusCode In (1, 3, 8, 12, 14, 22)
WHERE子句在GROUP BY之前以及在设计的任何聚合函数之前进行求值。要在聚合后过滤,请使用HAVING子句:

或使用子查询:

Select a.ID, a.Max_saledate, a.empName, a.saleStatusCode
From (
    Select ID, Max(saledate) "Max_saledate", empName, saleStatusCode
    From saleDatabase
    Group By ID, empName, saleStatusCode) a
Where saleStatusCode In (1, 3, 8, 12, 14, 22) 
Order By ID Asc

既然您的要求已经明确,我想这就是您需要的:

SELECT ID, saledate, empName, saleStatusCode
FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY saledate DESC) RowOrder, *
    FROM #Test
    ) SUBQ
WHERE RowOrder = 1
在您的情况下,结果是:

1   2014-12-12 00:00:00.000 Joe Joe Joe 2
事实上,结果会显示Mark,因为它的日期是3014年,但我想那是个打字错误

重要编辑:

哦,约翰·H的评论让我重新思考这个问题,我发现我完全过度思考了你的问题!!您的请求本可以很容易地解决:

SELECT TOP 1 *
FROM #Test
WHERE saleStatusCodeIN (1, 2, 3, 8, 122, 14, 22)
ORDER BY saledate DESC

我怎么会错过呢?

where子句覆盖max是什么意思?您可以发布一些示例数据,然后发布查询结果吗?然后显示预期输出。你说的超过最大值是什么意思?第二个字段将显示每个ID、empName、SALESSTATUSCODE组合的最高销售日期。您想改为每行上整个表的最大值吗?请添加一些示例数据和预期结果。@Andrew-我上面的代码返回了多个id,正在按照bluefeetOf课程的要求发布示例数据,如果您按id、empName、saleStatusCode分组,则在源表中,这些值的每个组合都将得到一行。如果希望获得整个表的最大值,则不应进行任何分组。@MasterOfStupidQuestions,请不要将表创建代码以结尾,并且标记的日期为3014。而且我猜ID值不应该都是1。无论如何,在这种情况下,我认为在WHERE或having中使用该条件将得到完全相同的结果。分组后saleStatusCode没有区别。@Andrew是的,你说得对。我认为条件是一个完全不同的领域,但事实并非如此。
SELECT TOP 1 *
FROM #Test
WHERE saleStatusCodeIN (1, 2, 3, 8, 122, 14, 22)
ORDER BY saledate DESC