我在db MySQL中有表SignRegister
,其中注册了对网站区域的访问权限重新注册。MySQL中一小时内分组事件
例如为:
现在我需要为同一AccountSign
删除访问时,它们被包含在一个小时内和Sign
值不T
值。
E.g.对于AccountSign
我需要Id number
16和20删除行:
+----+------+------------+----------+-------------+
| id | Sign | DateSign | HourSign | AccountSign |
+----+------+------------+----------+-------------+
| 18 | B | 2015-10-29 | 15:01:34 | 4041002 |
| 19 | B | 2015-10-29 | 17:35:44 | 4041002 |
+----+------+------------+----------+-------------+
对于选择那些行我曾尝试此查询:
mysql> SELECT
id,
`Sign`,
`DateSign`,
`HourSign`,
`AccountSign`,
TIMEDIFF(a.`HourSign`, b.`HourSign`) AS strDiff1
FROM
SignRegister a
JOIN SignRegister ON a.`AccountSign` = b.`AccountSign`
AND (
TIMEDIFF(a.`HourSign`, b.`HourSign`) BETWEEN '00:00:00'
AND '01:00:00'
)
WHERE
`AccountSign` IN ('4041002')
AND `Sign` IN ('B', 'L')
AND (
TIMEDIFF(a.`HourSign`, b.`HourSign`) BETWEEN '00:00:00'
AND '01:00:00'
)
ORDER BY
`DateSign`,
`HourSign` ASC;
+----+------+------------+----------+-------------+----------+
| id | Sign | DateSign | HourSign | AccountSign | strDiff1 |
+----+------+------------+----------+-------------+----------+
| 18 | B | 2015-10-29 | 15:01:34 | 4041002 | 00:00:00 |
| 16 | L | 2015-10-29 | 15:03:29 | 4041002 | 00:00:00 |
| 16 | L | 2015-10-29 | 15:03:29 | 4041002 | 00:01:55 |
| 19 | B | 2015-10-29 | 17:35:44 | 4041002 | 00:00:00 |
| 20 | B | 2015-10-29 | 17:49:22 | 4041002 | 00:13:38 |
| 20 | B | 2015-10-29 | 17:49:22 | 4041002 | 00:00:00 |
+----+------+------------+----------+-------------+----------+
6 rows in set
在这种情况下,我必须找到ID number
16 20与strDiff1
不同于00:00:00
。
现在尝试相同的代码与其他AccountSign
,如:
mysql> SELECT
id,
`Sign`,
`DateSign`,
`HourSign`,
`AccountSign`
FROM
SignRegister
WHERE
`AccountSign` IN ('4042801')
ORDER BY
`DateSign`,
`HourSign` ASC;
+----+------+------------+----------+-------------+
| id | Sign | DateSign | HourSign | AccountSign |
+----+------+------------+----------+-------------+
| 83 | T | 2015-10-29 | 06:31:02 | 4042801 |
| 85 | B | 2015-10-29 | 06:34:49 | 4042801 |
+----+------+------------+----------+-------------+
2 rows in set
在这种情况下,当它们被包含在一个小时内我不会在同一AccountSign
访问删除,因为第一次访问是签署T
值。
但是当我尝试选择那些行:
mysql> SELECT
id,
`Sign`,
`DateSign`,
`HourSign`,
`AccountSign`,
TIMEDIFF(a.`HourSign`, b.`HourSign`) AS strDiff1
FROM
SignRegister a
JOIN SignRegister ON a.`AccountSign` = b.`AccountSign`
AND (
TIMEDIFF(a.`HourSign`, b.`HourSign`) BETWEEN '00:00:00'
AND '01:00:00'
)
WHERE
`AccountSign` IN ('4042801')
AND `Sign` IN ('B', 'L')
AND (
TIMEDIFF(a.`HourSign`, b.`HourSign`) BETWEEN '00:00:00'
AND '01:00:00'
)
ORDER BY
`DateSign`,
`HourSign` ASC;
+----+------+------------+----------+-------------+----------+
| id | Sign | DateSign | HourSign | AccountSign | strDiff1 |
+----+------+------------+----------+-------------+----------+
| 85 | B | 2015-10-29 | 06:34:49 | 4042801 | 00:03:47 |
| 85 | B | 2015-10-29 | 06:34:49 | 4042801 | 00:00:00 |
+----+------+------------+----------+-------------+----------+
2 rows in set
查询找到ID number
85是不被删除,因为第一Sign
是T
值。
请帮帮我。
预先感谢您。
编辑#01
对于AccountSign
表SignRegister
我都记下来了这些访问:
+----+------+------------+----------+-------------+
| id | Sign | DateSign | HourSign | AccountSign |
+----+------+------------+----------+-------------+
| 83 | T | 2015-10-29 | 06:31:02 | 4042801 |
| 85 | B | 2015-10-29 | 06:34:49 | 4042801 |
+----+------+------------+----------+-------------+
在这种情况下AccountSign
第一次访问有Sign
等于值为T
。
当存在这种情况时,不需要在一个小时内删除访问,因为Sign
等于T
的值。
“第一个isgn就是t值”在你显示它是B的例子中? – Thomas
@Thomas:请在我的第一个问题中看到**编辑#01 **,谢谢, –