在SQL数据库中查找最近的常客
我需要在数据库中找到常客名单 有两个重要的表格:人口统计和访问 这就是我到目前为止所做的:在SQL数据库中查找最近的常客,sql,ms-access,Sql,Ms Access,我需要在数据库中找到常客名单 有两个重要的表格:人口统计和访问 这就是我到目前为止所做的: SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID) WHERE Visits.[Visit Date] > #1/1/2019# GROUP BY Demographi
SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID
FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID)
WHERE Visits.[Visit Date] > #1/1/2019#
GROUP BY Demographics.[First Name], Demographics.[Last Name], Demographics.ID
HAVING COUNT(Visits.ID) >=5;
它运行并返回去年访问过5次或以上的用户。然而,我真正想要的是访问过5次或更多次的人,并且去年至少访问过一次。我假设答案涉及一个ORDERBY子句并删除WHERE子句,但我不确定如何表达它
我在Windows 7上使用Microsoft Access我知道。。。如果有帮助的话
谢谢。经过一段时间的思考,我相信我能够回答我自己的问题 以下是我的解决方案:
SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID
FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID)
WHERE Demographics.ID IN
(
SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID
FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID)
WHERE Visits.[Visit Date] > #1/1/2019#
GROUP BY Demographics.[First Name], Demographics.[Last Name], Demographics.ID #parts of this line are superfluous
)
GROUP BY Demographics.[First Name], Demographics.[Last Name], Demographics.ID
HAVING COUNT(Visits.ID) >=5;
SELECT d.[First Name], d.[Last Name], d.ID
FROM Demographics as d INNER JOIN
Visits as v
ON d.ID = v.ID
GROUP BY d.[First Name], d.[Last Name], d.ID
HAVING COUNT(Visits.ID) >= 5 AND
MAX(v.[Visit Date]) > #1/1/2019#;
子查询检查过去一年的访问,外部查询检查访问总数。我认为这是一个更简单的解决方案:
SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID
FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID)
WHERE Demographics.ID IN
(
SELECT Demographics.[First Name], Demographics.[Last Name], Demographics.ID
FROM Demographics INNER JOIN Visits ON (Demographics.ID=Visits.ID)
WHERE Visits.[Visit Date] > #1/1/2019#
GROUP BY Demographics.[First Name], Demographics.[Last Name], Demographics.ID #parts of this line are superfluous
)
GROUP BY Demographics.[First Name], Demographics.[Last Name], Demographics.ID
HAVING COUNT(Visits.ID) >=5;
SELECT d.[First Name], d.[Last Name], d.ID
FROM Demographics as d INNER JOIN
Visits as v
ON d.ID = v.ID
GROUP BY d.[First Name], d.[Last Name], d.ID
HAVING COUNT(Visits.ID) >= 5 AND
MAX(v.[Visit Date]) > #1/1/2019#;
我添加了表别名,因此查询更易于编写和读取。更简单的是将逻辑从何处转移到拥有