问题1
如何从表(非空)中为id\u car获取最小值?例如,对于id车1,最小值为50;对于id车2,最小值为50;对于id车3,最小值为300。我不需要复制品,一辆车只需要一个值。
ID_CAR | col_1 | col_2 | col_3 | col_4 | col_5 | col_6
1 | null | 250 | 300 | null | 900 | null
2 | 100 | null | 300 | 600 | 200 | 100
1 | 300 | 100 | 800 | 100 | 50 | 900
3 | 300 | 4000 | null | null | null | null
2 | null | null | null | 50 | null | 100
4 | 400 | 900 | 500 | 700 | 800 | 500
问题2在本例中,列*中的值是天。我需要加上几天的col\ u日期和得到最低。例如,id车1的最低日期为2018-01-03(第2列),id车2的最低日期为2018-01-15(第4列)。
ID_CAR | col_1 | col_2 | col_3 | col_4 | col_5 | col_6 | col_date
1 | null | 2 | 3 | null | 5 | null | 2018-01-01
2 | 1 | null | 3 | 6 | 10 | 10 | 2018-01-13
1 | 3 | 20 | 80 | 10 | 50 | 90 | 2018-01-02
3 | 30 | 40 | null | null | null | null | 2018-01-03
2 | null | null | null | 5 | null | 10 | 2018-01-10
4 | 10 | 9 | 5 | 70 | 8 | 50 | 2018-01-07
5条答案
按热度按时间vuktfyat1#
如果期望值大于999999999999999999,请尝试此操作,然后使用更高的值
gfttwv5a2#
下面的查询将为您提供所需的结果
btqmn9zl3#
你需要
UNION
:x6492ojm4#
没有
union
您可以简单地组合最小值和最小值函数:或者如果你有
null
你需要的价值观ifnull
或者coalesce
功能select
ID_CAR,
min(least(
DATE_ADD(col_date, INTERVAL ifnull(col_1,0) DAY),
DATE_ADD(col_date, INTERVAL ifnull(col_2,0) DAY),
DATE_ADD(col_date, INTERVAL ifnull(col_3,0) DAY),
DATE_ADD(col_date, INTERVAL ifnull(col_4,0) DAY),
DATE_ADD(col_date, INTERVAL ifnull(col_5,0) DAY),
DATE_ADD(col_date, INTERVAL ifnull(col_6,0) DAY)
)) as lowest_date
from
table
group by
ID_CAR
select
ID_CAR,
DATE_ADD(col_date, INTERVAL min(least(
ifnull(col_1,~0),
ifnull(col_2,~0),
ifnull(col_3,~0),
ifnull(col_4,~0),
ifnull(col_5,~0),
ifnull(col_6,~0)
)) DAY) as lowest_date
from
table
group by
ID_CAR
o7jaxewo5#
最简单的方法是使用最少的:
但是:如果least的任何参数为null,它将返回null。您要么需要将空值转换为一个高值(这是一个hack,但在实践中会起作用,请参阅其他答案)。
也就是说做这样的事:
但是,最好使用技巧将表转换为以下形式的三行表: