如何在SQL中选择后一行
我的结果集如下所示: 正如您所看到的,一些如何在SQL中选择后一行,sql,sql-server,Sql,Sql Server,我的结果集如下所示: 正如您所看到的,一些联系人ID重复使用相同的问题回答。还有一个有不同的问题回答(有红线的那一个) 我想按联系人ID对其进行分组,但选择后一行。例如:如果是ContactID=78100299,我想选择带有CreateDate=17:00:44.907(或rowNum=2)的行 我试过这个: select ContactID, max(QuestionResponse) as QuestionResponse, max(CreateDate) as
联系人ID
重复使用相同的问题回答
。还有一个有不同的问题回答(有红线的那一个)
我想按联系人ID对其进行分组,但选择后一行。例如:如果是ContactID=78100299
,我想选择带有CreateDate=17:00:44.907
(或rowNum=2)的行
我试过这个:
select
ContactID,
max(QuestionResponse) as QuestionResponse,
max(CreateDate) as CreateDate
from
theResultSet
group by
ContactID
这将不起作用,因为对于相同的联系人ID
,可能会有问题响应
2,然后是1。在这种情况下,后一个将是响应为1而不是2的
谢谢您的帮助。我会这样使用行号()
WITH Query AS
(
SELECT rowNum, ContactID, QuestionResponse, CreateDate,
ROW_NUMBER() OVER (PARTITION BY ContactID ORDER BY CreateDate DESC) Ordered
FROM theResultSet
)
SELECT * FROM Query WHERE Ordered=1
按日期、降序在ContactID组中分配号码
具有数字1的筛选结果
如果您的SQL引擎能够处理它,这可能会起作用
SELECT trs1.*
FROM theResultSet trs1
INNER JOIN
(SELECT ContactID, max(CreateDate) as CreateDate
FROM theResultSet
GROUP BY ContactID) trs2
ON trs1.ContactID = trs2.ContactID
AND trs1.CreateDate = trs2.CreateDate
最终结果将是结果集中的所有行,其中创建日期为最大创建日期。这也应该适用:
SELECT
ContactID, QuestionResponse,CreateDate
FROM (
select rowNum, ContactID, QuestionResponse,CreateDate,
max(rowNum) over(partition by ContactID) as maxrow
from theResultSet
) x
WHERE rowNum=maxrow
您的SQLServer版本是什么?请将结果集粘贴为text max(rowNum)是否不适用于同一分组?max(rowNum)有帮助!谢谢你,西蒙!!谢谢你的回复。我试图避免进行自连接,我不会在这里使用group
这个词,因为groupby
在SQL中已经有了某种含义。我会使用sql中实际存在的单词<代码>分区
——即使你必须定义你的意思,至少它不会含糊不清。