找到符合以下需求的六次打卡,1,以每天首次打卡为基准,余下每次打卡时间间隔大于等于1小时,小于三小时,2,第五次打卡时间要小于18:00,第六次打卡时间要大于18:00

题目:从上述“已签到”表格内销售的n次打卡中找到符合以下需求的六次打卡,1,以每天首次打卡为基准,余下每次打卡时间间隔大于等于1小时,小于三小时,2,第五次打卡时间要小于18:00,第六次打卡时间要大于18:00
数据:链接:https://pan.baidu.com/s/1m3Pq8JNYdAGyY-zX8N9DYw
提取码:hu54
在这里插入图片描述

-- 视图
WITH `temp`
as (SELECT 
*, ROW_NUMBER() over(PARTITION by `NAME` ORDER BY time ASC) `rank`
FROM sign_in
) 
  
SELECT
  a.`name`
FROM 
temp a,
temp b,
temp c,
temp d,
temp e,
temp f
WHERE
a.`name` = b.`name`
AND b.`name` = c.`name`
AND c.`name` = d.`name`
AND d.`name` = e.`name`
AND e.`name` = f.`name`
-- 取前面连续6个
AND a.rank = 6
AND b.rank = 5
AND c.rank = 4
AND d.rank = 3
AND e.rank = 2
AND f.rank = 1
-- 时间条件
AND TIMESTAMPDIFF(HOUR, b.time, a.time) BETWEEN 1 and 3
AND TIMESTAMPDIFF(HOUR, c.time, b.time) BETWEEN 1 and 3
AND TIMESTAMPDIFF(HOUR, d.time, c.time) BETWEEN 1 and 3
AND TIMESTAMPDIFF(HOUR, e.time, d.time) BETWEEN 1 and 3
AND TIMESTAMPDIFF(HOUR, f.time, e.time) BETWEEN 1 and 3
AND TIMESTAMPDIFF(SECOND, b.time, '2024-04-19 18:00:00') >= 0
AND TIMESTAMPDIFF(SECOND, a.time, '2024-04-19 18:00:00') <= 0
GROUP BY `name`


或者

WITH RankedSignIns AS (
    SELECT 
        `name`,
        `time`,
        ROW_NUMBER() OVER (PARTITION BY `name`, DATE(`time`) ORDER BY `time`) AS `rank`
    FROM 
        sign_in
)

SELECT 
    a.`name`
FROM 
    RankedSignIns a
    JOIN RankedSignIns b ON a.`name` = b.`name` AND b.`rank` = a.`rank` - 1
    JOIN RankedSignIns c ON a.`name` = c.`name` AND c.`rank` = b.`rank` - 1
    JOIN RankedSignIns d ON a.`name` = d.`name` AND d.`rank` = c.`rank` - 1
    JOIN RankedSignIns e ON a.`name` = e.`name` AND e.`rank` = d.`rank` - 1
    JOIN RankedSignIns f ON a.`name` = f.`name` AND f.`rank` = e.`rank` - 1
WHERE
    a.`rank` = 6
    AND TIMESTAMPDIFF(HOUR, f.`time`, e.`time`) BETWEEN 1 AND 3
    AND TIMESTAMPDIFF(HOUR, e.`time`, d.`time`) BETWEEN 1 AND 3
    AND TIMESTAMPDIFF(HOUR, d.`time`, c.`time`) BETWEEN 1 AND 3
    AND TIMESTAMPDIFF(HOUR, c.`time`, b.`time`) BETWEEN 1 AND 3
    AND TIMESTAMPDIFF(HOUR, b.`time`, a.`time`) BETWEEN 1 AND 3
    AND TIME(b.`time`) < '18:00:00'
    AND TIME(a.`time`) > '18:00:00'
GROUP BY 
    a.`name`;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值