1
我写这样的方式下面的查询返回的数据,我需要:分组和排序结果挑最近的记录在MS SQL
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
唯一的问题是,这封邮件我使用在这里过滤器产生这样的多个结果(虽然是正确的):
如何使用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
它返回错误的结果:
我期待它返回该记录:
任何想法我可能在这里做错了吗?
感谢这个,我想它是这样的:http://pastebin.com/GCssEkpC它仍然返回错误的结果如上图所示。但是,如果我删除'group by'子句,它将返回2条记录(对于customeraccountnumber的每个变体)。我做错了吗? – Latheesan
@Latheesan你必须从你的问题的一开始就进行查询,并用'q作为()...'粘贴。从您的输出5行将显示只有两个在最近的日期。 –
gofr1
我试过了,它确实显示**两个像这样的记录:http://i.imgur.com/hAWlUqY.png - 这不是我所需要的。每个电子邮件需要一个结果,按照最近的'DocumentDate'排序,因此我应该根据我的原始问题得到customeraccountnumber'JAC006'的结果。即我试图使用'order by'和'_email_组'。 – Latheesan