我一直在對這個小查詢進行相當多的研究,並且決定是時候提出問題了。這可能是一個很長的帖子,所以我爲此道歉。SQL顯示最近來自連接表的更新
這是學校裏的功課,而我只是用一些SQL玩耍,我使用MySQL作爲數據庫管理系統。
我想顯示所有成員的信息,使用連接在SQL語句。
這裏的表的簡要概述,我有
成員
- ID
- Firs_Name
- 姓氏
- USER_ID(外鍵用戶表)
- 會員_類型(外鍵Membership_type表)
- 電話
- 電子郵件
- 年齡
Grade_Type
- ID
- 說明
在Grade_type表中的數據是這樣的
ID DESCRIPTION
1 A Grade
2 B Grade
3 C Grade
4 D Grade
5 E Grade
6 F Troop
等級(這是一個結合表,持有會員ID,等級和日期,保存歷史記錄等級升級和降級。
- ID
- Member_ID(FK到構件表
- Grade_ID(FK到grad_type表
- 日期
本表數據如下,因爲你可以看到,多個成員已經改變等級2-3次
ID MEMBER_ID GRADE_ID DATE
1 1 3 2013-02-12
2 2 2 2013-03-14
3 4 2 2013-01-16
4 3 6 2013-01-29
5 5 1 2012-10-18
6 4 4 2013-04-09
7 6 5 2012-12-11
8 1 2 2013-05-03
9 2 3 2013-04-10
10 3 5 2013-03-13
11 4 3 2013-03-06
12 5 3 2012-12-13
13 6 4 2013-04-09
14 1 6 2013-05-06
我希望做的是有一個這樣的輸出,其中品位在最後,可顯示最新的變化,下面也是我曾經收到這個SQL狀態,我很努力找出在哪裏,或如何投入「MAX(DATE
)」字段或類似的東西。
ID FIRST_NAME LAST_NAME PHONE EMAIL AGE USERNAME Membership Type ANNUAL_FEE Grade
1 John Lennon 9345 3253 [email protected] 38 jlennon Full Standard Member 185 C Grade
2 Devin Townsend 9342 3421 [email protected] 78 dtownsend Senior 70+ 135 B Grade
3 Mikael Akerfeldt 9342 5675 [email protected] 41 makerfeldt Full Standard Member 185 F Troop
4 Dexter Morgan 8324 3211 [email protected] 67 dmorgan Social 35 B Grade
5 Martin Mendez 7845 3454 [email protected] 82 mmendez Senior 70+ 135 A Grade
6 Paul McCartney 7543 8765 [email protected] 36 pmcartney Social 35 E Grade
SQL語句
SELECT `members`.`ID`, `members`.`FIRST_NAME`, `members`.`LAST_NAME`,`members`.`PHONE`,`members`.`EMAIL`,`members`.`AGE`,
`users`.`USERNAME`, `membership_type`.`DESCRIPTION` AS 'Membership Type',`membership_type`.`ANNUAL_FEE`, `grade_type`.`DESCRIPTION` AS 'Grade' FROM `2013evccor`.`members`
JOIN `users` ON `members`.`USER_ID` = `users`.`ID`
JOIN `membership_type` ON `members`.`MEMBERSHIP_TYPE` = `membership_type`.`ID`
LEFT JOIN (`grades` JOIN `grade_type` ON `grade_type`.`ID` = `grades`.`GRADE_ID`) ON `grades`.`MEMBER_ID` = `members`.`ID` GROUP BY `members`.`ID`
另一份聲明中我已經試過了這一點,因爲它的立場,以及在嵌套聲明加入
SELECT `grades`.`MEMBER_ID`,`grades`.`GRADE_ID`,MAX(`grades`.`DATE`) AS 'DATE' FROM `grades` GROUP BY `grades`.`MEMBER_ID`
但是這將返回該數據:
MEMBER_ID GRADE_ID DATE
--------- -------- ------------
1 3 2013-05-06
2 2 2013-04-10
3 6 2013-03-13
4 2 2013-04-09
5 1 2012-12-13
6 5 2013-04-09
現在上面的日期是每個成員的最近日期,但是等級不正確,例如,Member_ID:1現在在Grade_ID中:6自「2013-05-06」起不是Grade_ID:3
也許我應該嘗試使用等級表作爲選擇語句FROM
子句中的起點。如果我這樣做了,我是否仍然可以通過成員表中的外鍵輕鬆獲取成員用戶名和成員信息?
對不起,這是一篇很長的文章,我真的不知道如何把所有這些都放在一邊,而且我喜歡在描述我已經試過的所有東西時徹底。
雖然MySQL的實現GROUP BY擴展(見http://dev.mysql.com/doc/refman/5.6/en/group-by-extensions.html)它不提供任何保證,非聚集GROUP BY列表之外的字段將具有*合理的*值。 – 2013-05-07 02:42:08
謝謝,我想我明白你在說什麼,我將來會記住這一點。 – 2013-05-07 04:15:06