mysql - 检索具有最小日期的行中的所有列?

标签 mysql sql date min

有没有办法在不使用自连接的情况下解决这样的问题?使用 min() 函数的一些方法?

我想为每组列 c1 和 c2 获取第一个水果条目。 (假设日期不能相同)

DROP TABLE IF EXISTS test;
CREATE TABLE test
(
    c1 varchar(25),
    c2 varchar(25),
    fruit varchar(25),
    currentTime Datetime
);
INSERT INTO test VALUES    
('a','b','pineapple','2013-01-28 20:50:00'),
('a','b','papaya','2013-01-28 20:49:00'),
('a','b','pear','2013-01-28 20:51:00'),
('a','c','peach','2013-01-28 18:12:00'),    
('a','c','plum','2013-01-28 20:40:00'),
('a','c','pluot','2013-01-28 16:50:00');

这是我当前的查询:

SELECT t2.* 
  FROM (SELECT c1,
               c2,
               MIN(currentTime) AS ct
          FROM test 
      GROUP BY c1, c2) as t1
  JOIN test t2
    ON t1.c1 = t2.c1 AND
       t1.c2 = t2.c2 AND
       t2.currentTime = t1.ct

这会产生每个 c1/c2 对的最早条目,但是有没有办法使用 min() 并避免自连接?

最佳答案

答案是"is"。你可以通过聚合来做到这一点。关键是使用 group_concat()/substring_index() 技巧来获得第一个水果:

select c1, c2,
       substring_index(group_concat(fruit order by currentTime), ',', 1) as fruit,
       min(currentTime)
from test
group by c1, c2;

这已经在您的 SQL Fiddle 上进行了测试。

关于mysql - 检索具有最小日期的行中的所有列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18392342/

相关文章:

python - 如何在 SQL 和 Pandas 中获得相同的percent_rank?

java - MongoDB 与 Morphia 的日常分组

mysql - 使用从两个查询返回的数据填充临时表

sql - Postgres 选择时间范围前后是否存在另一个事件

javascript - 如何在 Nodejs 中提取来自 sql 的结果

mysql - 从两个表中查找最近的最大购买日期

date - 使用谷歌应用程序脚本阅读特定日期的电子邮件

php - 如何在 Fullcalendar 中保存事件?

mysql - 处于更新状态的kill删除语句是否会回滚整个数据?

MySql过滤组查询