Это первый раз, когда я пытаюсь использовать предложение 'HAVING' в своем SQL: мне нужно только показывать клиенту элементы в допустимом периоде. Меня очень смущает результат теста:
MariaDB [n4_2]> CREATE TABLE `test_01` (
-> `create_time` INT(11) UNSIGNED NOT NULL,
-> `expire_time` INT(11) UNSIGNED NOT NULL
-> );
Query OK, 0 rows affected (0.012 sec)
MariaDB [n4_2]> INSERT INTO `test_01` VALUES (1495000000, 1790000000);
Query OK, 1 row affected (0.003 sec)
MariaDB [n4_2]> SELECT
-> UNIX_TIMESTAMP() AS "timeStamp",
-> `test_01`.`expire_time` AS "expire_time",
-> `test_01`.`expire_time` - UNIX_TIMESTAMP() AS "diff"
-> FROM `test_01`
-> HAVING "timeStamp" > "expire_time";
+------------+-------------+-----------+
| timeStamp | expire_time | diff |
+------------+-------------+-----------+
| 1571664550 | 1790000000 | 218335450 |
+------------+-------------+-----------+
1 row in set (0.000 sec)
MariaDB [n4_2]> SELECT
-> UNIX_TIMESTAMP() AS "timeStamp",
-> `test_01`.`expire_time` AS "expire_time",
-> `test_01`.`expire_time` - UNIX_TIMESTAMP() AS "diff"
-> FROM `test_01`
-> HAVING "timeStamp" < "expire_time";
Empty set (0.000 sec)
Вопрос в том, почему условие HAVING "timeStamp" < "expire_time"
не может получить запись, а условие HAVING "timeStamp" >= "expire_time"
- запись? Очевидно, что временная метка NOW меньше, чем expire_time.