MySQL选择查询,从另一个表中添加最大值

时间:2018-01-26 21:24:25

标签: mysql

尝试使用新表添加另一列,将不胜感激任何帮助/建议!

当前查询:

SELECT parent.name AS parentname, a.name AS accname, 
parent.code AS parentcode, a.code AS acccode, 
parent.guid AS parentguid, a.guid AS accguid, 
a.account_type AS accttype, 
sum(case when date_format(post_date, '%Y-%m-%d') <= '2017-12-31' then (s.value_num/s.value_denom) else '0' end) AS 'value2017-12-31', 
sum(case when date_format(post_date, '%Y-%m-%d') <= '2018-01-25' then (s.value_num/s.value_denom) else '0' end) AS 'value2018-01-25'

FROM transactions AS t INNER JOIN splits AS s ON s.tx_guid = t.guid 
INNER JOIN accounts AS a ON a.guid = s.account_guid 
INNER JOIN accounts AS parent ON parent.guid = a.parent_guid 
WHERE a.hidden = 0 AND a.account_type NOT IN ('INCOME', 'EXPENSE')
AND parent.name <>'' 
AND a.guid = '3f3fc442a98225f481bb72e0fd526cbb'
GROUP by accname, parentname ORDER by acccode

这很好,给出了一行结果。我现在想在结果中添加另一列,我相信记录的价格表中的左外连接是2017-12-31之前最接近的日期。我的尝试:

SELECT parent.name AS parentname, a.name AS accname, 
parent.code AS parentcode, a.code AS acccode, 
parent.guid AS parentguid, a.guid AS accguid, 
a.account_type AS accttype, 
sum(case when date_format(post_date, '%Y-%m-%d') <= '2017-12-31' then (s.value_num/s.value_denom) else '0' end) AS 'value2017-12-31', 
sum(case when date_format(post_date, '%Y-%m-%d') <= '2018-01-25' then (s.value_num/s.value_denom) else '0' end) AS 'value2018-01-25',
MAX(case when date_format(p.date, '%Y-%m-%d') <= '2017-12-31' then (p.value_num/p.value_denom) else '0' end) AS 'price2017-12-31'

FROM transactions AS t INNER JOIN splits AS s ON s.tx_guid = t.guid 
INNER JOIN accounts AS a ON a.guid = s.account_guid 
INNER JOIN accounts AS parent ON parent.guid = a.parent_guid 
LEFT OUTER JOIN prices as p ON p.commodity_guid = a.commodity_guid
WHERE a.hidden = 0 AND a.account_type NOT IN ('INCOME', 'EXPENSE')
AND parent.name <>'' 
AND a.guid = '3f3fc442a98225f481bb72e0fd526cbb'
GROUP by accname, parentname ORDER by acccode

显然不正确,因为它现在正在更改值2017-12-31和值2018-01-25的值。我使用单独的查询正确地得到了价格:

SELECT p.value_num/p.value_denom as calcprice 
  FROM `prices` as p 
 WHERE commodity_guid = '77be249d12d9889e90f08dde7c671eb0' 
   AND date_format(p.date, '%Y-%m-%d') <= '2017-12-31' 
 order 
    by date DESC 
 limit 1

有没有办法合并它们而不是使用临时表?

0 个答案:

没有答案