我已經閱讀了很多與這個問題非常類似的問題和答案,主要問題是他們使用LIMIT
作爲解決方案來返回最新的記錄,噸與這個查詢工作,因爲我需要幾個結果回來。MYSQL - 返回GROUP BY前的最近記錄
邏輯如下爲:
- 每個記錄具有
effective_date
,當記錄值生效。 - 只有拉回來的記錄誰是
effective_date
的是今天或已通過 - 我拉回來的記錄,給我基礎上,最近的記錄「
date_entered
」該記錄
到目前爲止通過此查詢,我能夠完成除了最後一點邏輯之外的所有內容。我不能在GROUP BY
之後使用ORDER BY
,因爲結果已經被分組,因此我無法使用MAX()
日期。我需要做WHERE
聲明中的邏輯。
SELECT
aos_products.`name`,
cac_customize_agent_comp_cstm.commission_percentage_c,
cac_customize_agent_comp.date_entered
FROM
wn_writing_number
LEFT OUTER JOIN wn_writing_number_cac_customize_agent_comp_1_c ON wn_writing_number.id = wn_writing_number_cac_customize_agent_comp_1_c.wn_writing946b_number_ida
LEFT OUTER JOIN cac_customize_agent_comp_cstm ON wn_writing_number_cac_customize_agent_comp_1_c.wn_writing3148nt_comp_idb = cac_customize_agent_comp_cstm.id_c
LEFT OUTER JOIN cac_customize_agent_comp ON cac_customize_agent_comp_cstm.id_c = cac_customize_agent_comp.id
LEFT OUTER JOIN aos_products_cac_customize_agent_comp_1_c ON cac_customize_agent_comp_cstm.id_c = aos_products_cac_customize_agent_comp_1_c.aos_produca2b8nt_comp_idb
LEFT OUTER JOIN aos_products ON aos_products_cac_customize_agent_comp_1_c.aos_products_cac_customize_agent_comp_1aos_products_ida = aos_products.id
WHERE
wn_writing_number.id = 'b556d816-f2e6-b78f-c776-576c0542585c'
AND wn_writing_number_cac_customize_agent_comp_1_c.deleted = '0'
AND cac_customize_agent_comp_cstm.effective_date_c <= CURDATE()
GROUP BY aos_products.`name`
沒有GROUP BY,則返回:
+---------+-------------------------+----------------------+
| name | commission_percentage_c | date_entered |
+---------+-------------------------+----------------------+
| Val 2 | 14.75 | 2016-07-07 15:04:02 |
+---------+-------------------------+----------------------+
| Val 1 | 16 | 2016-07-07 00:31:08 |
+---------+-------------------------+----------------------+
:
(varchar) (varchar) (datetime)
+---------+-------------------------+----------------------+
| name | commission_percentage_c | date_entered |
+---------+-------------------------+----------------------+
| Val 1 | 15.25 | 2016-07-06 23:57:28 |
+---------+-------------------------+----------------------+
| Val 1 | 15.75 | 2016-07-07 00:03:03 |
+---------+-------------------------+----------------------+
| Val 1 | 16 | 2016-07-07 00:31:08 |
+---------+-------------------------+----------------------+
| Val 2 | 14.75 | 2016-07-07 15:04:02 |
+---------+-------------------------+----------------------+
與返回
+---------+-------------------------+----------------------+
| name | commission_percentage_c | date_entered |
+---------+-------------------------+----------------------+
| Val 2 | 14.75 | 2016-07-07 15:04:02 |
+---------+-------------------------+----------------------+
| Val 1 | 15.25 | 2016-07-06 23:57:28 |
+---------+-------------------------+----------------------+
我試圖找回是集團
因爲我需要最新的VAL 1記錄d回來,像使用
WHERE the datediff BETWEEN NOW() and date_entered = the smallest amount of time compared with other records
使用'max()'爲date_entered – CSK
[檢索每個組中的最後一條記錄]的可能重複(http://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group ) – imtheman