MySQL的。选择没有1天

时间:2019-03-07 15:47:44

标签: 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

2 个答案:

答案 0 :(得分:1)

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

类似这样的东西:

str

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

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返回一行。)

答案 1 :(得分:0)

您应尝试使用子查询排除min dt:

SELECT name, MAX(rate) AS max
FROM (SELECT name, rate, dt
      FROM   base B
      WHERE dt NOT IN (SELECT MIN(dt) FROM base WHERE name=B.name ))  as A 
GROUP BY name

提琴here