大家
好,我有一个 MySQL 查询,它在几个派生表上使用连接。其中一个派生查询效果很好,我得到了正确数量的返回行。
但我也试图从相关表中为每一行显示一些额外的信息,这就是我苦苦挣扎的地方。我在这里阅读了其他几个类似问题的问题,但我无法将其应用于我的查询。
这是查询:
SELECT `adbookings`.`company_id`, `companies`.`company_name`, `adbookings`.`run`, `adbookings`.`bill_freq`, `adbookings`.`currency`, FORMAT(`adinserts`.`rate`, 2) AS `rate`, `publications`.`title`, CONCAT(FLOOR(CAST(UNIX_TIMESTAMP()-`invoices`.`last_invoice_stamp` AS SIGNED INTEGER)/86400), ' days ago') AS `last_invoice_days_ago`, `invoices`.`last_invoice_no`, `invoices`.`last_invoice_reference`
FROM `adinserts`
INNER JOIN
(
SELECT `publications`.`publication_id`, `publications`.`art_stamp`, `publications`.`title`
FROM `publications`
LEFT JOIN `adinserts` ON `publications`.`publication_id`=`adinserts`.`publication_id` AND `adinserts`.`invoice_id` IS NOT NULL
WHERE `publications`.`publication_stamp`>=UNIX_TIMESTAMP('2010-01-01 00:00:00')
GROUP BY `publications`.`publication_id`
HAVING COUNT(`adinserts`.`invoice_id`)>0
) AS `publications` ON `adinserts`.`publication_id`=`publications`.`publication_id`
LEFT JOIN `adbookings` ON `adinserts`.`booking_id`=`adbookings`.`booking_id`
LEFT JOIN
(
SELECT `company_id`, CONCAT_WS('', `prefix`, `invoice_id`, `suffix`) AS `last_invoice_no`, MAX(`invoices`.`invoice_stamp`) AS `last_invoice_stamp`, `reference` AS `last_invoice_reference`
FROM `invoices`
GROUP BY `invoices`.`company_id`
) AS `invoices` ON `adbookings`.`company_id`=`invoices`.`company_id`
LEFT JOIN `companies` ON `adbookings`.`company_id`=`companies`.`company_id`
WHERE `adinserts`.`invoice_id` IS NULL AND `adinserts`.`cancel_stamp` IS NULL AND `adinserts`.`rate`>0
ORDER BY `publications`.`art_stamp`, `companies`.`company_name`
我的问题是第二个派生表...LEFT JOIN (...) AS invoices
我正在尝试使用 MAX(invoice_stamp) 获取该公司最近相关发票的 invoice_stamp。这似乎有效,并且确实返回了具有最大 invoice_stamp(Unix 时间戳)值的相关记录。
但我也在尝试获取 MAX() 聚合函数返回的该记录的匹配 invoice_id 和参考字段。但是 invoice_id 和 reference 字段与 MAX() 函数返回的记录不匹配。
任何人都知道如何获取派生表中聚合函数返回的记录的完整详细信息?