首页 > 解决方案 > 显示过去24小时内没有输入mysql的数据

问题描述

输出超过 24 小时未输入数据库的 mysql 值。

我尝试加入辅助表并比较日期大于 1 天的日期输入,但是当我运行查询时,它似乎没有过滤掉前 24 小时内输入的数据。

SELECT t1.value,t1.date,t1.time
FROM filter t1 LEFT JOIN filter t2
ON (t1.value= t2.value AND concat(t1.date,' ',t1.time) < 
concat(t2.date,t2.time)) WHERE t2.date > curdate() - interval 1 day;

http://www.sqlfiddle.com/#!9/9d41ea/2

我的理想结果是有下面的例子,其中日期是 06/01/19

value        date
  1        01/01/19 
  1        05/01/19 
  2        05/01/19 
  2        06/01/19 
  3        03/01/19 
  3        04/01/19 
  4        05/01/19 
  4        06/01/19 

选择过去一天(05/01/19 和 06/01/19)数据库中不存在的值(数字)显示结果

过去一天中出现的数字 1.2.4 不显示在结果中

过去第 3 天不存在的数字显示在结果中

查询如

select value,date from filter where date < curdate() - interval 1 day but not > curdate() - interval 1 day

标签: mysql

解决方案


在这个例子中,我得到了过去 24 小时内预期交易的所有值,然后离开加入查看它们是否有,

drop table if exists t;
CREATE TABLE t (
  value VARCHAR(45),
  date DATE,
  time TIME

);
INSERT INTO t (value,date,time) 
VALUES ('1','2019-01-10','14:30:00'),
('1','2019-01-10','14:30:00'),
('1','2019-01-13','14:31:00'),
('1','2019-01-14','14:32:00'),
('2','2019-01-10','14:30:00'),
('2','2019-01-13','14:31:00'),
('2','2019-01-14','14:32:00'),
('3','2019-01-10','14:30:00'),
('3','2019-01-13','14:31:00'),
('3','2019-01-14','14:32:00'),
('4','2019-01-10','14:30:00'),
('4','2019-01-13','14:31:00'),
('4','2019-01-14','14:32:00'),
('5','2019-01-01','14:00:00');


select s.value,s.dt,t.dt
from
(
select distinct value,last24hr.dt
from t
cross join (select date_sub(now(), interval 1 day) dt) last24hr
) s
left join
(select value,cast(concat(date,' ',time) as datetime) dt from t) t
on s.value = t.value and s.dt <= t.dt
where t.dt is null;

+-------+---------------------+------+
| value | dt                  | dt   |
+-------+---------------------+------+
| 5     | 2019-01-13 12:08:23 | NULL |
+-------+---------------------+------+
1 row in set (0.00 sec)

当然,您的样本都没有失败,所以我添加了 5 个,在您测试时可能找不到(如果您这样做的话)


推荐阅读