SELECT
a.price as price1
, IFNULL(b.price,'(no data)') as price2
, (a.price - IFNULL(b.price,0)) as difference
FROM table1 a
LEFT JOIN table2 b ON (a.`item name` = b.`item name`)
GROUP BY a.`item name`
HAVING IFNULL(b.`date`,'') = MAX(IFNULL(b.`date`,'')
Así es como funciona.
Selecciona los datos de 2 tablas: todos los datos de la tabla 1 y los datos correspondientes de la tabla 2.
Si no puede encontrar los datos coincidentes de la tabla 2, sustituirá los valores null
en lugar de las filas faltantes. (left join
)
entonces grupos (group by
) filas juntos basan en table1.item name
.
Esto combina varias filas por artículo.
La cláusula having
corrige esto al seleccionar solo las filas de fecha más recientes de la tabla2.
Una pequeña corrección va integrado en las cláusulas y select
having
a tratar el caso cuando no hay datos en la Tabla 2 para que coincida con tabla1.
Su consulta debe ser:
SELECT
s.closing as price1
, IFNULL(sh.closing,'(no data)') as price2
, (s.closing - IFNULL(sh.closing,0)) as difference
FROM stocks s
LEFT JOIN stockhistory sh ON (s.symbol = sh.symbol)
GROUP BY s.symbol
HAVING IFNULL(sh.edate,'') = MAX(IFNULL(sh.edate,'')
LIMIT 30 OFFSET 0;
funciona! gracias: D –