SQL每日一题【0304】

每日一题

有如下表T0304
T0304
+------+--------+------+---------------------+
| ID   | A_Type | A_NO | A_Time              |
+------+--------+------+---------------------+
|    1 | A      |    1 | 2019-01-21 00:00:00 |
|    2 | A      |    2 | 2019-01-27 00:00:00 |
|    3 | A      |    3 | 2019-01-23 00:00:00 |
|    4 | A      |    4 | 2019-01-24 00:00:00 |
|    5 | A      |    5 | 2019-01-25 00:00:00 |
|    6 | B      |    1 | 2019-05-25 00:00:00 |
|    7 | B      |    2 | 2019-05-22 00:00:00 |
|    8 | B      |    3 | 2019-05-23 00:00:00 |
|    9 | B      |    4 | 2019-05-24 00:00:00 |
|   10 | C      |    1 | 2019-06-12 00:00:00 |
|   11 | C      |    2 | 2019-06-17 00:00:00 |
|   12 | C      |    3 | 2019-06-14 00:00:00 |
|   13 | D      |    1 | 2019-07-08 00:00:00 |
|   14 | D      |    2 | 2019-07-09 00:00:00 |
|   15 | D      |    3 | 2019-07-10 00:00:00 |
|   16 | D      |    4 | 2019-07-11 00:00:00 |
+------+--------+------+---------------------+

挑选出带有选中字样的数据
规则如下: 同一类型的数据A_Type 按照A_NO的顺序 时间依次是变大的,如果时间有异常 ,则为条数异常的数据
如 id 为2的数据时间应该比id为3的数据小才对,但是比id为3的大则筛选出来,id为6,11都是同一规则,结果如下:

在这里插入图片描述

CREATE TABLE T0304(
    ID INT NULL,
    A_Type VARCHAR(50) NULL,
    A_NO INT NULL,
    A_Time DATETIME NULL
) 
 
-- 插入语句
INSERT INTO T0304 VALUES (1,'A',1,'2019/1/21')
INSERT INTO T0304 VALUES (2,'A',2,'2019/1/27')
INSERT INTO T0304 VALUES (3,'A',3,'2019/1/23')
INSERT INTO T0304 VALUES (4,'A',4,'2019/1/24')
INSERT INTO T0304 VALUES (5,'A',5,'2019/1/25')
INSERT INTO T0304 VALUES (6,'B',1,'2019/5/25')
INSERT INTO T0304 VALUES (7,'B',2,'2019/5/22')
INSERT INTO T0304 VALUES (8,'B',3,'2019/5/23')
INSERT INTO T0304 VALUES (9,'B',4,'2019/5/24')
INSERT INTO T0304 VALUES (10,'C',1,'2019/6/12')
INSERT INTO T0304 VALUES (11,'C',2,'2019/6/17')
INSERT INTO T0304 VALUES (12,'C',3,'2019/6/14')
INSERT INTO T0304 VALUES (13,'D',1,'2019/7/8')
INSERT INTO T0304 VALUES (14,'D',2,'2019/7/9')
INSERT INTO T0304 VALUES (15,'D',3,'2019/7/10')
INSERT INTO T0304 VALUES (16,'D',4,'2019/7/11')

解法

  • 1
SELECT DISTINCT
	a.* 
FROM
	t0304 a,
	t0304 b 
WHERE
	a.A_Type = b.A_type 
	AND a.A_No < b.A_No AND a.A_Time > b.A_Time;

在这里插入图片描述

  • 2
SELECT
	ID,
	A_type,
	A_NO,
	A_time,
	A_NO AS rid 
FROM
	( SELECT *, lead( A_time, 1 ) over ( PARTITION BY A_type ORDER BY A_no ) A_next_time FROM t0304 ) AS a 
WHERE
	A_time > A_next_time;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值