Tendo acabado de atualizar para 1.9.2.2 para o site de um amigo e me deparando com esse problema, coloquei o seguinte patch no arquivo,
[magento/app/code/core/Mage/CatalogRule/Model/Action/Index/Refresh.php]
Não posso dizer quais efeitos de onflow podem existir e futuras atualizações terão que ter cuidado para não perder esse recurso se esse arquivo for substituído, é claro, mas para começar, adicione a linha:
'rules_hash' => new Zend_Db_Expr('NULL'),
para fazer com que a instrução select tenha a seguinte aparência:
$select = $this->_connection->select()
->from($indexSelect, array())
->joinInner(
array(
'dates' => $this->_connection->select()->union(
array(
new Zend_Db_Expr(
'SELECT ' . $this->_connection->getDateAddSql(
$this->_connection->fromUnixtime($time),
-1,
Varien_Db_Adapter_Interface::INTERVAL_DAY
) . ' AS rule_date'
),
new Zend_Db_Expr('SELECT ' . $this->_connection->fromUnixtime($time) . ' AS rule_date'),
new Zend_Db_Expr(
'SELECT ' . $this->_connection->getDateAddSql(
$this->_connection->fromUnixtime($time),
1,
Varien_Db_Adapter_Interface::INTERVAL_DAY
) . ' AS rule_date'
),
)
)
),
'1=1',
array()
)
->columns(
array(
'rule_product_price_id' => new Zend_Db_Expr('NULL'),
'rule_date' => 'dates.rule_date',
'customer_group_id' => 'customer_group_id',
'product_id' => 'product_id',
'rule_price' => 'MIN(rule_price)',
'website_id' => new Zend_Db_Expr($website->getId()),
'latest_start_date' => 'latest_start_date',
'earliest_end_date' => 'earliest_end_date',
/**
Added because rules_hash was created by some module and not handled properly,
see http://stackoverflow.com/questions/19480415/whats-wrong-with-this-magento-query
*/
'rules_hash' => new Zend_Db_Expr('NULL'),
)
)
->where(new Zend_Db_Expr($this->_connection->getUnixTimestamp('dates.rule_date') . " >= from_time"))
->where(
$this->_connection->getCheckSql(
new Zend_Db_Expr('to_time = 0'),
new Zend_Db_Expr(1),
new Zend_Db_Expr($this->_connection->getUnixTimestamp('dates.rule_date') . " <= to_time")
)
)
->group(array('customer_group_id', 'product_id', 'dates.rule_date'));
return $select;