[英]SQL Combining two queries
下面的代码从两个表中选择记录,其中电子邮件和dob匹配另一个记录(所有重复。)
SELECT
AccountName,
EmailAddress,
DateOfBirth
FROM
(
SELECT
a.AccountName,
a.EmailAddress,
u.DateOfBirth,
COUNT(*) over (partition by a.EmailAddress, u.DateOfBirth) AS cnt
FROM Account AS a
JOIN [User] AS u ON a.AccountID = u.AccountID
) ua
WHERE cnt > 1
AND EmailAddress IS NOT null
AND DateOfBirth IS NOT null
ORDER BY EmailAddress, DateOfBirth
我还想在此表中添加另一个名为“ Audit”的表中的字段。 我们可以使用LoginID加入他们,但是LoginID在Audit表中具有一对多的关系。 即,一个LoginID可以具有许多审核。
我要添加“审核开始日期”列。 以下查询使我可以按日期标识最新的审核。
SELECT a.LoginID as AuditLoginID,
MAX(StartDate) as StartDate
FROM Audit as a
GROUP BY a.LoginID
ORDER BY a.StartDate
谁能建议我如何组合这两个查询,以便我的原始查询具有到“审计”表的联接,并显示最新审计开始日期的“ StartDate”列?
您应该考虑使用相关子查询 。 这样可以避免构建另一个数据库对象来支持此查询,并且这是一个相对标准的SQL构造。
例:
SELECT
AccountName,
EmailAddress,
DateOfBirth
FROM
(
SELECT
a.AccountName,
a.EmailAddress,
u.DateOfBirth,
a.LoginID,
COUNT(*) over (partition by a.EmailAddress, u.DateOfBirth) AS cnt
FROM Account AS a
JOIN [User] AS u ON a.AccountID = u.AccountID
) ua
join Audit as a
on a.LoginID = au.LoginID
WHERE cnt > 1
AND EmailAddress IS NOT null
AND DateOfBirth IS NOT null
AND a.startdate = (SELECT MAX(StartDate) as StartDate
FROM Audit as b
WHERE b.LoginID = a.LoginID)
ORDER BY EmailAddress, DateOfBirth
这是我的评论的扩展:
CREATE VIEW MostRecentLogins AS
(
SELECT a.LoginID as AuditLoginID,
MAX(StartDate) as StartDate
FROM Audit as a
GROUP BY a.LoginID
)
然后,您可以将MostRecentLogins
视图加入其他查询中。 从您的帖子中尚不清楚哪一列与LoginId
对应(从Audit
表中),但是查询看起来像这样:
SELECT a.AccountName,
a.EmailAddress,
u.DateOfBirth,
MRL.StartDate
FROM
(
SELECT a.AccountName,
a.EmailAddress,
u.DateOfBirth,
COUNT(*) over (partition by a.EmailAddress, u.DateOfBirth) AS cnt
FROM Account AS a
JOIN [User] AS u
ON a.AccountID = u.AccountID
) ua
INNER JOIN MostRecentLogins MRL
ON MRL.LoginID = a.LoginID -- not sure what column should be on the RHS of this..
WHERE cnt > 1
AND EmailAddress IS NOT null
AND DateOfBirth IS NOT null
ORDER BY EmailAddress, DateOfBirth
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.