mssql筛选注册时间相差小于五分钟,姓名相同,其他条件不同的查询出来显示时间最近的一条记录

snnqida 2017-08-07 04:26:26
如题,时间小于5分钟的显示最近的一条记录.只有姓名相同,其他条件都不同
...全文
686 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

with cte([编号] ,[日期] ,[时间] ,[姓名] ,[地址]) as(
select 1,'2017-08-02','10:59:00',N'小三',N'地址A' union all
select 2,'2017-08-02','11:01:00',N'小三',N'地址B'
)
select c1.*  from cte c1 ,cte c2 where  c1.姓名=c2.姓名  AND DATEDIFF(MINUTE, c2.日期+' '+c2.时间, c1.日期+' '+c1.时间) between 1 and 5 
snnqida 2017-08-08
  • 打赏
  • 举报
回复
引用 6 楼 sinat_28984567 的回复:
试试这个:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
Create table #T([编号] int,[日期] NVARCHAR(100),[时间] NVARCHAR(100),[姓名] nvarchar(22),[地址] nvarchar(23))
Insert #T
select 1,'2017-08-02','10:59:00',N'小三',N'地址A' union all
select 2,'2017-08-02','11:01:00',N'小三',N'地址B'
Go
--测试数据结束
SELECT  a.*
FROM    #T a
        JOIN ( SELECT   b.姓名 ,
                        MAX(b.时间) AS 时间
               FROM     #T b
               WHERE    EXISTS ( SELECT 1
                                 FROM   #T c
                                 WHERE  b.姓名 = c.姓名
                                        AND DATEDIFF(MINUTE, c.日期+' '+c.时间, b.日期+' '+b.时间) > 0
                                        AND DATEDIFF(MINUTE, c.日期+' '+c.时间, b.日期+' '+b.时间) < 5 )
               GROUP BY b.姓名
             ) t ON t.姓名 = a.姓名
                    AND t.时间 = a.时间
					
感谢大牛,我试试
二月十六 版主 2017-08-07
  • 打赏
  • 举报
回复
试试这个:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([编号] int,[日期] NVARCHAR(100),[时间] NVARCHAR(100),[姓名] nvarchar(22),[地址] nvarchar(23))
Insert #T
select 1,'2017-08-02','10:59:00',N'小三',N'地址A' union all
select 2,'2017-08-02','11:01:00',N'小三',N'地址B'
Go
--测试数据结束
SELECT a.*
FROM #T a
JOIN ( SELECT b.姓名 ,
MAX(b.时间) AS 时间
FROM #T b
WHERE EXISTS ( SELECT 1
FROM #T c
WHERE b.姓名 = c.姓名
AND DATEDIFF(MINUTE, c.日期+' '+c.时间, b.日期+' '+b.时间) > 0
AND DATEDIFF(MINUTE, c.日期+' '+c.时间, b.日期+' '+b.时间) < 5 )
GROUP BY b.姓名
) t ON t.姓名 = a.姓名
AND t.时间 = a.时间


snnqida 2017-08-07
  • 打赏
  • 举报
回复
引用 3 楼 sinat_28984567 的回复:
大概这个意思:
--测试数据
if not object_id(N'Tempdb..#T') is null
	drop table #T
Go
 CREATE TABLE #T(id INT,name NVARCHAR(100),registertime DATETIME)
Insert #T
select 1,N'张三','2017-01-01 11:01:01' union all
select 2,N'张三','2017-01-01 11:11:01' union all
select 3,N'张三','2017-01-01 11:15:01' union all
select 4,N'李四','2017-01-01 11:15:01' union all
select 5,N'李四','2017-01-01 11:18:01'
Go
--测试数据结束
SELECT  * ,
        ( SELECT TOP 1
                    registertime
          FROM      #T b
          WHERE     a.name = b.name
                    AND a.id <> b.id
					AND ABS(DATEDIFF(MINUTE, a.registertime, b.registertime))<5
          ORDER BY  ABS(DATEDIFF(MINUTE, a.registertime, b.registertime))
        ) AS 最近时间
FROM    #T a
编号 日期 时间 姓名 地址 1 2017-08-02 10:59 小三 地址A 2 2017-08-02 11:01 小三 地址B 时间差小于5分钟,所以只显示编号2的这条记录 2 2017-08-02 11:01 小三 地址B
snnqida 2017-08-07
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
[quote=引用 楼主 snnqida 的回复:] 如题,时间小于5分钟的显示最近的一条记录.只有姓名相同,其他条件都不同
表结构,和 示例数据发上来,可以让解决问题变得更快[/quote] 编号 日期 时间 姓名 地址 1 2017-08-02 10:59 小三 地址A 2 2017-08-02 11:01 小三 地址B 时间差小于5分钟,所以只显示编号2的这条记录 2 2017-08-02 11:01 小三 地址B
二月十六 版主 2017-08-07
  • 打赏
  • 举报
回复
大概这个意思:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
CREATE TABLE #T(id INT,name NVARCHAR(100),registertime DATETIME)
Insert #T
select 1,N'张三','2017-01-01 11:01:01' union all
select 2,N'张三','2017-01-01 11:11:01' union all
select 3,N'张三','2017-01-01 11:15:01' union all
select 4,N'李四','2017-01-01 11:15:01' union all
select 5,N'李四','2017-01-01 11:18:01'
Go
--测试数据结束
SELECT * ,
( SELECT TOP 1
registertime
FROM #T b
WHERE a.name = b.name
AND a.id <> b.id
AND ABS(DATEDIFF(MINUTE, a.registertime, b.registertime))<5
ORDER BY ABS(DATEDIFF(MINUTE, a.registertime, b.registertime))
) AS 最近时间
FROM #T a


snnqida 2017-08-07
  • 打赏
  • 举报
回复
编号 日期 时间 姓名 地址 1 2017-08-02 10:59 小三 地址A 2 2017-08-02 11:01 小三 地址B 时间差小于5分钟,所以只显示编号2的这条记录 2 2017-08-02 11:01 小三 地址B
OwenZeng_DBA 2017-08-07
  • 打赏
  • 举报
回复
引用 楼主 snnqida 的回复:
如题,时间小于5分钟的显示最近的一条记录.只有姓名相同,其他条件都不同
表结构,和 示例数据发上来,可以让解决问题变得更快

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧