mysql - 如何在 MySQL 中选择日期之间差异最大的列

标签 mysql sql database

我试图找到第一次和最后一次读取之间时间最长的产品的产品 EPC。表中可以有多个条目。

例如,在下面显示的示例数据中,一种 EPC 为 03.0000A89... 的产品具有日期为 1992-11-05 的条目和日期为 2015-05-12 的条目。这显然在日期之间具有最长的持续时间,但我不知道如何编写查询来解决这个问题。

这些是 DDL:

CREATE TABLE IF NOT EXISTS `Track_Record` (
  `longitude` varchar(15) NOT NULL ,
  `lattitude` varchar(15) NOT NULL ,
  `datetime` DATETIME NOT NULL,
  `EPC` varchar(200) NOT NULL ,
  `ip` varchar(50) NOT NULL ,

  PRIMARY KEY  (ip, EPC, datetime)
); 

 INSERT INTO track_record (ip, longitude, lattitude, datetime, EPC)
VALUES
('000.111.222', '27.4667 S', '153.0333 E', '1992-11-05 18:56:46', '03.0000A89.00016F.000169DCD'), -- 0
('000.111.222', '27.4667 S', '153.0333 E', '2015-05-12 13:21:16', '03.0000A89.00016F.000169DCD'), -- 0
('555.666.777', '22.2783 N', '114.1747 E', '2012-07-19 12:22:16', '04.0000A89.00016F.000169DCD'), -- 0
('000.111.222', '27.4667 S', '153.0333 E', '2011-03-01 11:43:26', '03.0000A89.00016F.000169DCD'), -- 0
('555.666.777', '27.4667 S', '153.0333 E', '2014-09-02 18:53:14', '06.0000A89.00016F.000169DCD'),
('222.333.444', '59.3500 N', '18.0667 E', '2002-10-05 18:23:18', '04.0000A89.00016F.000169DCD'), -- 0
('333.444.555', '15.7833 S', '47.8667 W', '2015-02-22 19:53:16', '01.0000A89.00016F.000169DCD'),

('555.666.777', '22.2783 N', '114.1747 E', '2014-02-23 18:53:14', '08.0000A89.00016F.000169DCD'),
('222.333.444', '59.3500 N', '18.0667 E', '2009-08-12 18:23:18', '03.0000A89.00016F.000169DCD'), -- 0
('333.444.555', '15.7833 S', '47.8667 W', '2015-10-26 19:53:16', '07.0000A89.00016F.000169DCD'),
('000.111.222', '27.4667 S', '153.0333 E', '2002-11-21 11:43:26', '03.0000A89.00016F.000169DCD'), -- 0
('555.666.777', '22.2783 N', '114.1747 E', '2014-09-12 18:53:14', '06.0000A89.00016F.000169DCD'),
('222.333.444', '59.3500 N', '18.0667 E', '2010-09-13 18:23:18', '11.0000A89.00016F.000169DCD'), -- 0
('333.444.555', '15.7833 S', '47.8667 W', '2005-01-27 19:53:16', '01.0000A89.00016F.000169DCD'),
('555.666.777', '22.2783 N', '114.1747 E', '2006-09-22 18:53:14', '06.0000A89.00016F.000169DCD'),
('222.333.444', '59.3500 N', '18.0667 E', '2008-10-11 18:23:18', '04.0000A89.00016F.000169DCD'), -- 0
('888.444.555', '15.7833 S', '47.8667 W', '2013-03-19 19:53:16', '10.0000A89.00016F.000169DCD'),

('444.555.666', '51.5072 N', '0.1275 W', '2013-01-11 22:21:15', '04.0000A89.00016F.000169DCD'); -- 0

如果有人知道我是如何获得这些信息的,我将不胜感激你能提供的任何帮助。

谢谢科里

最佳答案

所以 EPC 是您的产品代码?然后你想要每个 EPC 的最小和最大时间,然后取具有最大差异的那个。就这样。

select epc
from
(
  select epc, max(datetime) - min(datetime) as diff
  from track_record
  group by epc
) products
order by diff desc limit 1;

关于mysql - 如何在 MySQL 中选择日期之间差异最大的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30454611/

相关文章:

sql - 限制可在 SQL Server 中查询的资源

mysql - LIKE 子句和 AND 运算符在 DELETE 期间不起作用

database - EAV 数据模型是否被视为数据库规范化的高级形式?

mysql - 尝试将 R 与 MySQL : The used command is not allowed with this MySQL version 一起使用

php - 如何从表 B 中选择属于表 A 的缺失表行?

mysql - Yii2 匹配 IN 子句中的所有值

mysql - 如何将 "array"的值传递给我的存储过程?

php - 在多对多表上使用左连接时,Symfony 3 返回错误的查询结果

mysql - 用于针对重复行插入或更新记录的存储过程

database - 关于数据库设计以记录系统中的用户事件的建议