You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server单表日期比较:查询同一日期有访客记录的人员编号

问题背景

开发时遇到SQL Server单表日期比较需求:需要从Visit表中查询得到存在同一日期受访记录的人员编号,暂未实现。
涉及的建表、测试数据插入、访问日期/时间更新SQL脚本如下:

create table Visit (
    Id_Visit int not null identity primary key,
    NumberVisits int not null,
    DescriptionVisits varchar(500) not null,
    DateVisit date not null,
    TimeVisit time not null,
    Person int not null,
    foreign key(Person) references Person(NumPerson)
);

insert into Visit values(2, 'Visita pela filha Joana e pelo neto João', '05-18-2020', '15:30', 1);

insert into Visit values(1, 'Visita pelo amigo Artur', '08-10-2020', '10:00', 2);

insert into Visit values(1, 'Visita pelo filho Joaquim', '09-14-2020', '17:10', 3);

insert into Visit values(1, 'Visita pelo advogado Firminio', '08-11-2020', '15:50', 2);

insert into Visit values(3, 'Visita pelas amigas Belandina, Carmélia e Rosa', '08-10-2020', '14:30', 1);


-- 调整ID为3的访问记录日期
update Visit 
set DateVisit = cast('2020-05-18' as date)
where Id_Visit = 3

-- 调整ID为3的访问记录时间
update Visit
set TimeVisit = cast('15:30' as time)
where Id_Visit = 3

-- 调整ID为2的访问记录日期
update Visit
set DateVisit = cast('2020-05-18' as date)
where Id_Visit = 2;
查询实现

根据常见的业务场景,对应两种查询写法:

场景1:查询单个人员在同一日期有多条受访记录的人员编号

按人员、访问日期分组,筛选出组内记录数大于1的分组,去重后即可得到目标人员编号:

SELECT DISTINCT Person
FROM Visit
GROUP BY Person, DateVisit
HAVING COUNT(Id_Visit) > 1

逻辑说明:

  • GROUP BY Person, DateVisit:将同一人员、同一访问日期的记录归为一组
  • HAVING COUNT(Id_Visit) > 1:过滤出组内记录数≥2的分组,即对应人员在该日期存在多条受访记录
  • DISTINCT:避免同一人员因多个日期满足条件,返回重复的人员编号

场景2:查询存在其他人员和自己在同一日期受访的人员编号

先筛选出有至少2名不同人员受访的日期,再关联原表得到这些日期对应的所有人员,去重后即可得到结果:

SELECT DISTINCT v.Person
FROM Visit v
INNER JOIN (
    SELECT DateVisit
    FROM Visit
    GROUP BY DateVisit
    HAVING COUNT(DISTINCT Person) > 1
) t ON v.DateVisit = t.DateVisit

结合提供的测试数据,执行完所有更新语句后,2020-05-18当天共有3名不同人员受访,该语句会返回人员编号1、2、3。

内容的提问来源于stack exchange,提问作者kevo3234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:30:17