mysql - 如果同一用户在一小时内重复访问,则使用 MySQL 时,只有第一个被认为是有效的
问题描述
我需要使用数据库 MySql 版本 5.7更新valid_access
表上列的现有值dotable
+----+------------+----------+-----------+--------------+
| id | yyyy_mm_dd | hh_mm_ss | user_code | valid_access |
+----+------------+----------+-----------+--------------+
| 1 | 2021-08-02 | 00:39:31 | D29942 | NULL |
| 2 | 2021-08-02 | 00:39:31 | D29942 | NULL |
| 3 | 2021-08-02 | 01:07:36 | D29942 | NULL |
| 4 | 2021-08-02 | 01:07:36 | D29942 | NULL |
| 5 | 2021-08-02 | 01:23:33 | D29942 | NULL |
| 6 | 2021-08-02 | 01:23:33 | D29942 | NULL |
| 7 | 2021-08-02 | 02:44:00 | D29942 | NULL |
+----+------------+----------+-----------+--------------+
我需要这个输出
+----+------------+----------+-----------+--------------+
| id | yyyy_mm_dd | hh_mm_ss | user_code | valid_access |
+----+------------+----------+-----------+--------------+
| 1 | 2021-08-02 | 00:39:31 | D29942 | 1 |
| 2 | 2021-08-02 | 00:39:31 | D29942 | NULL |
| 3 | 2021-08-02 | 01:07:36 | D29942 | NULL |
| 4 | 2021-08-02 | 01:07:36 | D29942 | NULL |
| 5 | 2021-08-02 | 01:23:33 | D29942 | NULL |
| 6 | 2021-08-02 | 01:23:33 | D29942 | NULL |
| 7 | 2021-08-02 | 02:44:00 | D29942 | 1 |
+----+------------+----------+-----------+--------------+
因为如果同一用户在一小时内重复访问,则只有第一个被认为是有效的。
有什么建议吗?
我的表结构和下面db-fiddle.com上的更新查询,它提供 MySQL 5.7
解决方案
假设您要标记相隔 1 小时的登录,查询将是:
SELECT *
FROM dotable AS curr
WHERE NOT EXISTS (
SELECT *
FROM dotable AS prev
WHERE prev.user_code = curr.user_code
AND TIMESTAMP(prev.yyyy_mm_dd, prev.hh_mm_ss) > TIMESTAMP(curr.yyyy_mm_dd, curr.hh_mm_ss) - INTERVAL 1 HOUR
AND (
TIMESTAMP(prev.yyyy_mm_dd, prev.hh_mm_ss) < TIMESTAMP(curr.yyyy_mm_dd, curr.hh_mm_ss)
OR
TIMESTAMP(prev.yyyy_mm_dd, prev.hh_mm_ss) = TIMESTAMP(curr.yyyy_mm_dd, curr.hh_mm_ss) AND prev.id < curr.id
)
)
推荐阅读
- r - Matlabs最小二乘估计通过\用于R中的欠定系统
- node.js - 如何解决 RangeError ERR_INVALID_ADDRESS_FAMILY:地址族无效
- python - 使用 python 修剪来自 Kafka 主题的返回值
- ios - UICollectionViewLayout.layoutAttributesForElementsInRect 的行为
- python - 根据列表替换pandas df中值的最佳方法
- nearprotocol - 未找到 Account_locked_balance 导入
- python-3.x - 我们如何在 keras 中加载 caffe2 预训练模型?
- python - 发送信封时python烧瓶中的Docusign“无效授予”错误
- c# - 我们如何为 List 抛出异常
在 C# 中使用接口和构造? - objective-c - NSUserDefaults setObject:forKey 冻结