2013-02-05 62 views
0

我目前正在使用一個會員來管理一個WordPress網站付款的網站,以強制付費。我不是設置它的管理員,而且我仍然在學習我的數據庫方式。另外,我的SQL-fu很弱;我不是經過培訓的工程師,但我是組織中唯一一個知道任何SQL的人。一個SQL查詢我不知道該怎麼寫(aMember wordpress插件)

我的首席財務官需要一份報告,該報告能夠在一天之內分解新註冊的數量,並追溯兩年。據我所知,aMember沒有簡單的細分。它所擁有的是我們收到的每筆付款的完整記錄。

我可以很容易地按日期細分此付款記錄,查看我們在給定日期獲得的付款金額。麻煩的是,許多這些付款來自現有用戶。此外,我們有已訂閱,取消,然後重新訂閱的用戶。我們的門檻是30天,因爲我們認爲這是一個「完整的失誤」。因此,我們希望忽略[用戶]在[日期] 30天內支付已過期的任何[日期]付款。

例如:約翰史密斯在2012年12月1日訂閱。約翰史密斯的最後一筆付款已於2013年1月1日到期。約翰的賬戶不會續約。約翰在2013年5月1日再次獲得認可。約翰的付款在2012年12月1日應算作「新」(因爲他沒有先前的付款記錄),但不在2013年1月5日(因爲他的付款在1/1過期, 1/5付款)。

模式如下。當前查詢不會篩選出現有會員更新,而只是收到的付款次數如下。如果需要任何額外的信息,或者有人知道會員超出我自己的知識範圍,請讓我知道我還能提供什麼幫助解答問題。我竭盡全力,盡我所能!

SELECT begin_date, COUNT(payment_id) 
FROM [foo] 
WHERE amount >0 
GROUP BY begin_date 
ORDER BY begin_date DESC 

payment_id 
member_id 
product_id 
begin_date 
expire_date 
paysys_id 
receipt_id 
amount 
completed 
remote_addr 
data 
time 
+0

您能否根據您的表格顯示一些示例數據和預期結果? – bonCodigo

+0

你能更具體嗎?你只想查看一些示例行或上述查詢的結果? –

回答

2

我認爲這樣做。它可能需要一些調整。我不確定究竟是> 0的數量,但它也包含在子查詢中。

對一些好的測試數據運行它以確保它產生正確的結果可能是一個好主意。

SELECT begin_date, COUNT(payment_id) 
FROM [foo] f1 
WHERE amount > 0 
AND 
-- don't count it if there's another subscription from this member that expires between the 30 days previous to this one and the end of this one. 
(select count(expire_date) from [foo] f2 where f1.member_id = f2.member_id and 
    f2.expire_date BETWEEN DATE_ADD(f1.begin_date, INTERVAL -30 day) and f1.expire_date 
    and f1.payment_id <> f2.payment_id and amount > 0) = 0 
GROUP BY begin_date 
ORDER BY begin_date DESC 
+0

PS。如果我的回答很有幫助,我會很感激它被標記爲「已接受」。謝謝! – Serinus