MySQL。选择没有 1 天

标签 mysql

基础:名称、速率、dt。 插入每天的费用,我需要知道没有第一天的最大费用。所有产品的第一天都是不同的。

包含所有日期

SELECT `name`, MAX(rate) AS max
FROM `base`
GROUP BY `name`

这与我想要的类似,但不起作用。

SELECT `name`, MAX(rate) AS max, MIN(dt) AS min_dt
FROM `base`
WHERE `dt` > `min_dt`
GROUP BY `name`

示例库

skirt, 6, 2018-10-10 00:00:00 
skirt, 7, 2018-10-11 00:00:00 
cap, 7, 2018-10-11 00:00:00 
skirt, 8, 2018-10-12 00:00:00 
cap, 6, 2018-10-12 00:00:00 

需要

skirt, 8
cap, 6

最佳答案

一种方法是使用内联 View 来获取每个名称的 min_dt。然后我们可以加入并排除最小日期行

类似这样的事情:

SELECT b.name
     , MAX(b.rate) AS `max`
  FROM ( SELECT d.name 
              , MIN(d.dt) AS min_dt
           FROM `base` d
          GROUP
             BY d.name
       ) m
  JOIN `base` b
    ON b.dt   > m.min_dt
   AND b.name = m.name 
 GROUP
    BY b.name

还有其他查询模式可以达到相同的结果。我的偏好是避免相关子查询,但类似这样的查询也会返回指定的结果:

SELECT b.name
     , MAX(b.rate) AS `max`
  FROM `base` b
 WHERE b.dt > ( SELECT MIN(d.dt) 
                  FROM `base` d
                 WHERE d.name = b.name 
              )
 GROUP
    BY b.name

(对于这两种查询形式,如果 base 中仅存在给定 name 的行,则查询将不会返回该 name 的行。)

关于MySQL。选择没有 1 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55047778/

相关文章:

PHP Crud 更新选择显示重复

mysql - 检查这个 MySQL 查询

mysql - SQL查询逻辑,将行的字段添加在一起

mysql join 查询在露天很慢,但使用索引

c# - 如何解决我的代码中当前的问题?

php - 如何使用pdo连接到mysql

mysql - SQL在更新后保留数据

java - JDBC executeQuery 无故显示错误

java - JPA 不向表添加复合约束

mysql,utf-8 列 : how to select only case-sensitive?