這裏是場景。我有像這樣帶有複雜聚合結果的MYSQL查詢
經驗模式兩個表:(ID,標題)
user_experience:(ID,experience_id,CREATED_DATE)
當用戶添加一個經驗給他做的名單,一個記錄被添加到user_experience中。現在我想知道一個經歷達到2,5或10個里程碑的里程碑的日期。
要求的結果:ID(experience.id),標題,CREATED_DATE,計數(沒有誰上市經驗的用戶)
如果經驗獲得10個製表,然後將結果應包括與時間記錄當它有2個和5個listers。
我正在使用此查詢來獲取所需的結果,並尋找更好的「查詢」。
SELECT e.id, e.title, ue_res.created_date, ue_res.count FROM
experience e INNER JOIN
(
SELECT ue.experience_id, (
SELECT COUNT(uee.id) FROM user_experience uee WHERE uee.experience_id = ue.experience_id AND uee.created_date <= ue.created_date
) AS `count`, ue.created_date FROM user_experience ue
) ue_res
ON e.id = ue_res.experience_id
WHERE ue_res.uecount IN (2,5,10)
ORDER BY e.id,ue_res.created_date ASC
我不能創建另一個成就表,因爲里程碑可以隨時更改,所以我只查找查詢。對於經驗
這裏是一些樣本數據
的樣本數據:
1 | Bunjee jump from Eifel Tower
2 | Surf in Rio
3 | Fly over Grand Canyon
4 | Go to a Mexican resturant
爲user_experience的樣本數據:
1 | 1 | 2013-03-01
2 | 4 | 2013-03-02
3 | 1 | 2013-03-03
4 | 3 | 2013-03-04
5 | 2 | 2013-03-05
6 | 3 | 2013-03-06
7 | 4 | 2013-03-07
8 | 1 | 2013-03-08
9 | 1 | 2013-03-09
10 | 1 | 2013-03-10
11 | 3 | 2013-03-11
12 | 2 | 2013-03-12
13 | 2 | 2013-03-13
結果爲樣本數據:
1 | Bunjee jump from Eifel Tower | 2013-03-03 | 2
3 | Fly over Grand Canyon | 2013-03-06 | 2
4 | Go to a Mexican resturant | 2013-03-07 | 2
1 | Bunjee jump from Eifel Tower | 2013-03-10 | 5
2 | Surf in Rio | 2013-03-12 | 2
臨屋提前:)
你能給出表格格式的樣本記錄嗎? – 2013-03-18 15:14:53
@Adee。 。 。你的查詢很好。 MySQL不支持您需要更簡潔的純SQL解決方案的窗口函數。 – 2013-03-18 15:35:54
@JW,這裏是你的示例數據:) – Adee 2013-03-19 07:00:18