oracle如何查询表中某个字段在半个小时内重复出现2次以上
发布网友
发布时间:2023-07-07 12:51
我来回答
共5个回答
热心网友
时间:2024-11-24 01:16
100分拿来吧。。你将表内随便加些数据用我得查询看下结果
create table T_TEST
(
ID VARCHAR2(20),
LEAVE_TIME DATE
);
select b.id
from (select a.id,
a.leave_time - lag(a.leave_time) over(partition by a.id order by a.leave_time) lv_time
from t_test a) b
where b.lv_time*24*60<=30
热心网友
时间:2024-11-24 01:17
select a.* from 表 a, 表 b
where a.卡号 = b.卡号 and a.时间 > b.时间 and trunc(abs(a.时间 - b.时间) * 24 * 60) <= 30
说明:
trunc(abs(a.时间 - b.时间) * 24 * 60) <= 30 是计算两个时间差在30分钟内追问有点小毛病,就出现重复值,不过加个distinct就可以,还有个问题想问下,
如果有一个同学符合要求,就是说有2个条记录在半个小时内,用你这种方法的话,只能显示出
a.时间的那一条,我想符合要求的‘a.时间’和‘b.时间’2条记录都显示出来
热心网友
时间:2024-11-24 01:17
时间差的问题,加个自连接就行了
select t.卡号 from 表名t,表名s
where t.卡号=s.卡号
and t.刷卡时间>s.刷卡时间
and round(to_number(t.刷卡时间-s.刷卡时间)*1440)<=30
其实round()方法是四舍五入取整,试试看吧
热心网友
时间:2024-11-24 01:18
存在一个表名为刷卡表 里面有时间和学生姓名两个字段
SELECT 学生姓名,to_char(时间,'yyyy-mm-dd hh'),COUNT(*)
FROM 刷卡表
WHERE to_char(时间,'mi') BETWEEN 0 AND 29
GROUP BY 学生姓名,to_char(时间,'yyyy-mm-dd hh')
HAVING COUNT(*) > 1
UNION
SELECT 学生姓名,to_char(时间,'yyyy-mm-dd hh'),COUNT(*)
FROM 刷卡表
WHERE to_char(时间,'mi') BETWEEN 30 AND 59
GROUP BY 学生姓名,to_char(时间,'yyyy-mm-dd hh')
HAVING COUNT(*) > 1;
热心网友
时间:2024-11-24 01:18
WITH testa AS
(
SELECT 1 ID,to_date('2011-8-23 08:30:30','yyyy-mm-dd hh24:mi:ss') leave FROM al
UNION ALL
SELECT 2 ID,to_date('2011-8-23 08:30:30','yyyy-mm-dd hh24:mi:ss') leave FROM al
UNION ALL
SELECT 1 ID,to_date('2011-8-23 09:00:30','yyyy-mm-dd hh24:mi:ss') leave FROM al
UNION ALL
SELECT 2 ID,to_date('2011-8-23 09:05:30','yyyy-mm-dd hh24:mi:ss') leave FROM al
)
SELECT ID,leave,aleave FROM (
SELECT ID,leave,LAG(leave,1)OVER(PARTITION BY ID ORDER BY leave) aleave FROM testa
)
WHERE (leave - aleave)*24*60<=30;