mysql как проверить интервал времени в зависимости от того, когда пользователь последний раз посещал это место - PullRequest
2 голосов
/ 12 марта 2020

У меня есть клиентская таблица, которая отображает, если это первый раз, когда клиент посетил это место, и индивидуальный идентификатор клиента, нужно указать, нужно ли пользователю возвращаться дольше 6 (360 минут) часов.

Проверьте код, чтобы увидеть, как далеко мне удалось самостоятельно добраться:

-- schema
CREATE TABLE Client (
    Id INT NOT NULL AUTO_INCREMENT,
    user_name VARCHAR(50) NOT NULL,
    user_id VARCHAR(30) NULL,
    first_time_buying VARCHAR(3) NOT NULL,
    visit_date DATETIME NOT NULL,
    PRIMARY KEY(Id)
)
;

-- data
INSERT INTO Client
    (user_name, user_id, first_time_buying, visit_date)
VALUES
    ('Fred', '1','yes' ,'2020-02-15 23:59:59'),
    ('Fernanda','2', 'yes', '2020-02-17 12:35:00'),
    ('Fred','1', 'no', '2020-02-21 15:59:09'),
    ('Fernanda','2', 'no','2020-03-01 11:06:39'),
    ('Fred','1', 'no', '2020-02-21 16:36:39)

;


созданный мною выбор:

SELECT
TIMESTAMPDIFF(MINUTE,
              (SELECT t1.visit_date
              from Client t1 inner join(select user_name, max(Id) as maxID from Client
                                       group by user_name) t2 on t1.user_name = t2.user_name
              and t1.Id = t2.maxID
              where t1.user_id = '2'),
              CURRENT_TIMESTAMP()) AS Difference

мне также нужно вычесть текущую метку времени с последним временем, когда пользователь вошел в место, и если его менее 360 минут возвращают ноль, иначе возвращают истину или количество минут.

Например:

, если в последний раз он / она посещал Магазин был до 6 ч. go Я ожидал получить значение NULL или FALSE, если оно больше, чем я ожидал получить значение или true.

пс: оно должно сравниваться с текущим значением метки времени .

Я могу предоставить дополнительную информацию только при необходимости.

Ответы [ 2 ]

1 голос
/ 12 марта 2020
SELECT 
case when TIMESTAMPDIFF(HOUR, max(c1.visit_date), CURRENT_TIMESTAMP()) < 360 then 'FALSE' ELSE 'TRUE' END as MoreThanSixHours
from client c1
group by c1.user_id
1 голос
/ 12 марта 2020

Ваш код возвращает правильные результаты, но он слишком сложен. Вы можете сделать это так:

SELECT
  TIMESTAMPDIFF(
    MINUTE,
    (
      SELECT MAX(visit_date)
      FROM Client 
      WHERE user_id = '2'
    ),   
    CURRENT_TIMESTAMP()
  ) AS Difference;

См. Демоверсию . Или проверьте это .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...