このクエリを Doctrine DBAL クエリに書き換えるか、createQuery() 構造に書き直すにはどうすればよいですか? createQuery() を使用すると、「data_last」が日付として認識されず、文字列として認識され、エラーが発生しました。おそらくより良い解決策は、symfony側で行われる内部左結合と計算でしょうか? ROUND 関数は Doctrine によって認識されません。
$sql='SELECT
q.fund_id AS tfi,
f.fundName AS name,
( SELECT `date`
FROM quotes
WHERE DATE_SUB( "'. $sToday .'", INTERVAL 1 MONTH ) <= `date` AND `fund_id` = `tfi`
ORDER BY `date` DESC
LIMIT 1) AS date_last,
( SELECT `value`
FROM quotes
WHERE `fund_id` = `tfi` AND `date` = `date_last`
LIMIT 1) AS value_last,
( SELECT `date`
FROM quotes
WHERE DATE_SUB( date_last, INTERVAL 1 MONTH ) <= `date` AND `fund_id` = `tfi`
ORDER BY `date` ASC
LIMIT 1) AS date_1m,
( SELECT `value`
FROM quotes
WHERE `fund_id` = `tfi` AND `date` = `date_1m`
LIMIT 1) AS value_1m,
( SELECT ROUND( (value_last-value_1m)/value_1m*100, 2) ) AS chg_1m
FROM quotes q
LEFT JOIN funds f
ON ( q.fund_id = f.id )
GROUP BY q.fund_id
ORDER BY f.fundName';