我有發出自動續約通知到會員,其會員是關於基礎上,他們購買了我們俱樂部的網上商店會員的最後日期到期,腳本:如何選擇記錄匹配的特定日期,但僅限於最近的記錄不存在?
SELECT members.id, first, last, class, email, name AS membershipType, lifetime, store_transactions.dateModified FROM store_transactions
LEFT JOIN members ON memberID = members.id
WHERE
(
DATE(store_transactions.dateModified) = SUBDATE(CURDATE(), INTERVAL 1 YEAR)
/*AND
NOT EXISTS(SELECT * FROM store_transactions WHERE DATE(store_transactions.dateModified) > SUBDATE(CURDATE(), INTERVAL 1 YEAR))*/
)
AND categoryID = 1 AND lifetime != 'Y'
GROUP BY members.id
ORDER BY last, first
我每天跑這個腳本通過一個CRON的工作,並且它運行良好(或者我認爲)通過發送電子郵件給所有在一年前購買會員的會員。但是,我沒有考慮到會員可以在我的腳本發出自動提醒之前更新其成員的事實)。
**更新: 在試圖實施該解決方案的幾個你推薦(THANK YOU!),這是我現在有我的查詢:
SELECT members.id, first, last, class, email, name AS membershipType, lifetime, store_transactions.dateModified, categoryID FROM store_transactions
LEFT JOIN members ON memberID = members.id
GROUP BY members.id
HAVING categoryID = 1 AND lifetime != 'Y'
AND DATE(MAX(store_transactions.dateModified)) = '2012-03-24' /* specific date to simplify debugging */
ORDER BY last, first
我覺得這是非常接近正確的解決方案,但GROUP BY往往會打破我的邏輯(這是我的頭),因爲我的store_transactions表具有不同類別的交易,可以由同一個成員(即會員,活動門票,廣告,捐贈等)。爲了這個查詢的目的,我只關心查看成員類別事務(「categoryID = 1」)。額外的「lifetime!='Y'」禁止此查詢返回其成員資格永不過期的終生成員。
總之,我希望此查詢返回一年前擁有「categoryID = 1」事務的成員的記錄,除非他們有「categoryID = 1」的更近期事務。下面是我的store_transactions表中的字段的情況下,它可以幫助:
ID 發票 MEMBERID 的categoryID 的productID 名 價格 數量 dateModified addedBy
因此,如果有人做一個次要購買它將在同一個表中?然後你可以選擇'MAX(store_transactions.dateModified)' – Horen 2013-03-07 22:17:14
謝謝Horen。我相信你的提示很好,但我在執行時遇到問題(見下文)。另外,我會更新我的代碼以顯示最新內容。 – psterling 2013-03-17 15:31:02