我正在尝试根据 MS Access 中的 ID 和日期从行数超过 2 的行中选择查询。
请指导我
我想将其保留为单个查询。
谢谢
桌子
Absen
身份证 | 日期 | 时间 | 输入输出 |
---|---|---|---|
5008 | 24 年 4 月 28 日 | 08:00 | 在 |
5008 | 24 年 4 月 28 日 | 17:00 | 出 |
5009 | 24 年 4 月 29 日 | 08:00 | 在 |
5009 | 24 年 4 月 29 日 | 17:00 | 出 |
5009 | 24 年 4 月 29 日 | 17:00 | 出 |
5010 | 24 年 4 月 28 日 | 08:00 | 在 |
5011 | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | 24 年 4 月 30 日 | 17:00 | 出 |
桌子
MASTERID
身份证 | 名称ID | 位置ID |
---|---|---|
5008 | A | 工作人员 |
5009 | B | 工作人员 |
5010 | C | 工作人员 |
5011 | D | 工作人员 |
我使用了这样的 SQL 代码结果:
select a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
from ABSEN a INNER JOIN MASTERID ON a.ID = MASTERID.ID
where exists(select 1 from ABSEN a2 where a.ID=a2.ID)
order by a.ID, a.DATE
代码结果
身份证 | 名称ID | 日期 | 时间 | 输入输出 |
---|---|---|---|---|
5008 | A | 24 年 4 月 28 日 | 08:00 | 在 |
5008 | A | 24 年 4 月 28 日 | 17:00 | 出 |
5009 | B | 24 年 4 月 29 日 | 08:00 | 在 |
5009 | B | 24 年 4 月 29 日 | 17:00 | 出 |
5009 | B | 24 年 4 月 29 日 | 17:00 | 出 |
5010 | C | 24 年 4 月 28 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 17:00 | 出 |
所需输出
身份证 | 名称ID | 日期 | 时间 | 输入输出 |
---|---|---|---|---|
5009 | B | 24 年 4 月 29 日 | 08:00 | 在 |
5009 | B | 24 年 4 月 29 日 | 17:00 | 出 |
5009 | B | 24 年 4 月 29 日 | 17:00 | 出 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 08:00 | 在 |
5011 | D | 24 年 4 月 30 日 | 17:00 | 出 |
以下查询应该有效(至少从 ANSI SQL 的角度来看):
SELECT a.ID, b.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN a
INNER JOIN MASTERID b
ON a.ID = b.ID
INNER JOIN (
SELECT ID
FROM ABSEN
GROUP BY ID
HAVING COUNT(*) > 2
) c
ON c.ID = a.ID
ORDER BY
a.ID,
a.DATE;