Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL数据库中查找最近的常客_Sql_Ms Access - Fatal编程技术网

在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#;
我添加了表别名,因此查询更易于编写和读取。更简单的是将逻辑从何处转移到拥有