Tengo una tabla mysql con precios como

id  element_id  daily_price   weekly_price   since          until 
----------------------------------------------------------------------
1       2           400           2800        2017-01-01   2017-05-31
2       2           500           3500        2017-06-01   2017-12-31
3       2           600           4200        2018-01-01   2018-05-31
4       2           700           4900        2018-06-01   2018-12-31

Me gustaría hacer una sola consulta que obtenga el precio mínimo diario y el precio semanal para el año actual. En caso de que no haya precios establecidos para el año en curso, entonces debería obtener los mismos precios mínimos para el año pasado.

0
Rober 9 sep. 2018 a las 14:00

3 respuestas

La mejor respuesta

Creo que esta es la forma más simple:

select min(daily_price), min(weekly_price)
    from table 
    where element_id = 2
    AND year(since) = (select max(year(since))
                       from table
                       where element_id = 2);

O esto si quieres usar una combinación en lugar de una subconsulta:

select min(daily_price), min(weekly_price)
from table a, (select max(year(since)) as year, element_id
                     from table
                     where element_id = 2) b
where a.element_id = 2
and a.element_id = b.element_id
and year(since) = b.year;
0
Rober 9 sep. 2018 a las 12:33

Puede usar una combinación con subconsulta anual, min diaria y min semanal

  select  a.id, a.year, b. min_daily, c.min_weekly 
  from  (

    select id, max(year(until)) year 
    from my_table  
    group by id 

    ) a 
    inner join  (
    select id, year(until) year,  min(daily_price)  min_daily
    from my_table  
    group by id ,  year(until)  

    ) b on a.id = b.id and a.year=b.year 

    inner join  (
      select  id,  year(until) year, min(weekly_price) min_weekly
      from my_table  
      group by id ,  year(until) 
      ) c on a.id = c.id and a.year=c.year  
0
scaisEdge 9 sep. 2018 a las 16:36

Puedes hacerlo usando esto

SELECT MIN(daily_price) as minDailyPrice, Max(weekly_price) as maxWeeklyPrice 
FROM yourTable 
WHERE until <= 'current_year_here' 
ORDER BY until DESC 
LIMIT 1
0
Asad ullah 9 sep. 2018 a las 11:07