みなさん、こんにちは
。いくつかの派生テーブルで結合を使用するMySQLクエリがあります。派生クエリの1つはうまく機能し、正しい数の行が返されます。
しかし、各行の関連テーブルからいくつかの追加情報を表示しようとしています。これは私が苦労しているところです。私はここで同様の質問とともに他のいくつかの質問を読みましたが、それを私のクエリに適用することができません。
クエリは次のとおりです。
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`
私の問題は2番目の派生テーブルにあります...LEFT JOIN (...) AS invoices
MAX(invoice_stamp)を使用して、その会社の最新の関連する請求書のinvoice_stampを取得しようとしています。これは機能しているように見え、invoice_stamp(Unixタイムスタンプ)の値が最大の関連レコードを返します。
しかし、MAX()集計関数によって返される、そのレコードの一致するinvoice_idフィールドと参照フィールドも取得しようとしています。ただし、invoice_idフィールドとreferenceフィールドは、MAX()関数によって返されるレコードと一致しません。
派生テーブルの集計関数によって返されるレコードの完全な詳細を取得する方法を知っている人はいますか?