分组和排序结果以选择MS SQL中的最新记录

Latheesan

我以这样的方式编写了以下查询,该查询返回了我需要的数据:

SELECT SLCA.CustomerAccountNumber, SLCD.DefaultEmail, SOR.DocumentDate, SLST.*
FROM SLCustomerAccount AS SLCA
INNER JOIN SOPOrderReturn AS SOR ON SOR.CustomerID = SLCA.SLCustomerAccountID
INNER JOIN SLCustomerContactDefaultsVw AS SLCD ON SLCD.SLCustomerAccountID = SLCA.SLCustomerAccountID
LEFT OUTER JOIN MMS182SLStatus AS SLST ON SLST.Customer = SLCA.SLCustomerAccountID
WHERE SLCD.IsDefaultRole = 1 AND SLCD.DefaultEmail IS NOT NULL AND SLCD.DefaultEmail <> ''
 AND SLCD.DefaultEmail = '[email protected]'
 AND SLST.[Status] IS NULL
ORDER BY SOR.DocumentDate DESC

唯一的问题是,我在where过滤器中使用的这封电子邮件会产生多个结果(尽管正确):

在此处输入图片说明

如何使用group by删除重复的行,所以对于最新的DocumentDate我只有一条记录?

我知道我可以做到,TOP 1但这不是我所需要的。因为,我现在通过将范围限定为一封重复的特定电子邮件来测试查询。稍后,我需要在没有该行的所有记录上运行此查询AND SLCD.DefaultEmail = '[email protected]'-这样您就可以了解为什么我不能使用TOP 1

当我尝试这样使用时group by

SELECT MAX(SLCA.CustomerAccountNumber), MAX(SLCD.DefaultEmail), MAX(SOR.DocumentDate), MAX(SLST.MMS182SLStatus), MAX(SLST.Customer), MAX(SLST.[Status])
FROM SLCustomerAccount AS SLCA
INNER JOIN SOPOrderReturn AS SOR ON SOR.CustomerID = SLCA.SLCustomerAccountID
INNER JOIN SLCustomerContactDefaultsVw AS SLCD ON SLCD.SLCustomerAccountID = SLCA.SLCustomerAccountID
LEFT OUTER JOIN MMS182SLStatus AS SLST ON SLST.Customer = SLCA.SLCustomerAccountID
WHERE SLCD.IsDefaultRole = 1 AND SLCD.DefaultEmail IS NOT NULL AND SLCD.DefaultEmail <> ''
 AND SLCD.DefaultEmail = '[email protected]'
 AND SLST.[Status] IS NULL
GROUP BY SLCD.DefaultEmail
ORDER BY MAX(SOR.DocumentDate) DESC

它返回错误的结果:

在此处输入图片说明

我期望它返回此记录:

在此处输入图片说明

有什么想法我可能在这里做错了吗?

戈登·利诺夫(Gordon Linoff)

用途row_number()

with q as (<your query here without the `order by`>)
select q.*
from (select q.*,
             row_number() over (partition by DefaultEmail order by documentdate desc) as seqnum
      from q
     ) q
where seqnum = 1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

SQL选择最新记录

SQL - 获取列中值最高的记录,然后选择这些记录中的最新记录

MS SQL:如何从查找表中为每个外键对选择最新记录

我正在尝试使用分组依据和排序依据显示表中的最新更新记录

访问SQL从条件中选择最新记录

在SQL Server中选择最新插入的记录

Microsoft Access SQL - 选择记录的最新“版本”

SQL为每个ID选择最新记录

我应该使用什么 Hibernate Query 来检索 MS SQL 中的最新记录?

如何使用SQl语法从MySQL表中的组中选择最新记录

SQL(SCCM数据库)中的查询在有重复项时仅选择最新记录

按关系中的最新记录列排序

SQL-按每个记录的最新日期选择记录

Oracle Sql:仅通过ID和日期选择最新记录

SQL中的分组和排序

在SQL Server 2008中使用分组依据和排序依据检索结果时出错

JPQL / SQL获取按列分组的最新记录

SQL查询可通过多个分组获取最新记录

SQL如果值是“已选择”,则为雇员选择最新记录

想要返回结果分组的最新记录

PostgreSQL - 加入最新记录以按结果分组

SQL:选择记录,其中一个字段中的值基于最新日期是唯一的

选择包含相同值SQL的连续行的最新记录

SQL-根据多个条件选择最新记录

SQL如何选择具有特定值的最新记录

SQL查询以选择具有不同主题的最新记录

从sql数据库中选择最新的3条记录

选择具有最新日期SQL的记录

表中有重复记录,我们需要使用sql中的group by或window函数仅选择按日期的最新记录