Jac*_*ack 2 mysql sql database mysqli
问题1
对于ID_CAR,如何从表(非空)中获取最低值?例如,对于ID_CAR 1,最低值为50,对于ID_CAR 2,最低值为50;对于ID_CAR 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
Run Code Online (Sandbox Code Playgroud)
问题2 在此示例中,col_*中的值是天.我需要为col_date添加天数并获得最低值.例如,ID_CAR 1的最低日期是2018-01-03(col_2),ID_CAR 2的最低日期是2018-01-15(col_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
Run Code Online (Sandbox Code Playgroud)
select
ID_CAR,min(least(col_1,col_2,col_3,col_4,col_5,col_6)) lowest_value
from
table
group by
ID_CAR
Run Code Online (Sandbox Code Playgroud)
或者如果您有null需要ifnull或有coalesce功能的价值观
select
ID_CAR,
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)
)) as lowest_value
from
table
group by
ID_CAR
Run Code Online (Sandbox Code Playgroud)
~0 是mysql中的最大bigintleast是greatestmin是max;-)适用于Mysql,Oracle,Postgres,Hive ......
问题2,这样的事情:
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
Run Code Online (Sandbox Code Playgroud)
或者像这样(除非所有列都可以为null):
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
Run Code Online (Sandbox Code Playgroud)