2013-05-30 53 views
2

我有兩個表一個是 'tb_student' 等是 'tb_fees'如何在一個查詢中進行分組和排序?

爲 'tb_student'

CREATE TABLE `tb_student` (
    `id` int(11) NOT NULL auto_increment, 
    `name` varchar(255) NOT NULL, 
    `email` varchar(255) NOT NULL, 
    `class` varchar(255) NOT NULL, 
    `created_on` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) 

創建查詢創建查詢 'tb_fees'

CREATE TABLE `tb_fees` (
    `id` int(11) NOT NULL auto_increment, 
    `email` varchar(255) NOT NULL, 
    `amount` varchar(255) NOT NULL, 
    `created_on` datetime NOT NULL default '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
) 

在第一個表我存儲學生的詳細信息,並在其他表中存儲費用詳情

我想從'tb_student'中選擇學生的詳細信息,從「tb_fees只針對那些學生,其在6級

所以我想這

SELECT * 
    FROM tb_student s INNER JOIN 
     tb_fees f on 
     s.email =f.email 
WHERE s.class = 6 GROUP BY s.email ORDER BY f.created_on DESC 

這會給結果只有第一個創建如何獲得最後創造的價值

收費表中添加費

insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (5,'[email protected]','5000','2013-05-01 14:20:15'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (6,'[email protected]','5000','2013-05-02 14:20:23'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (7,'[email protected]','5000','2013-05-03 14:20:30'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (8,'[email protected]','5000','2013-05-29 14:20:35'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (9,'[email protected]','5000','2013-05-30 14:20:39'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (10,'[email protected]','5000','2013-05-30 14:36:13'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (11,'[email protected]','5000','2013-05-30 14:36:15'); 
insert into `tb_fees`(`id`,`email`,`amount`,`created_on`) values (12,'[email protected]','5000','2013-05-30 14:36:15'); 

學生表值

insert into `tb_student`(`id`,`name`,`email`,`class`,`created_on`) values (5,'Ram','[email protected]','6','2013-04-30 14:00:56'); 
insert into `tb_student`(`id`,`name`,`email`,`class`,`created_on`) values (6,'Sam','[email protected]','6','2013-03-30 14:01:30'); 
insert into `tb_student`(`id`,`name`,`email`,`class`,`created_on`) values (7,'Nimmy','[email protected]','7','2013-04-30 13:59:59'); 
insert into `tb_student`(`id`,`name`,`email`,`class`,`created_on`) values (8,'jak','[email protected]','6','2013-03-30 14:07:32'); 
insert into `tb_student`(`id`,`name`,`email`,`class`,`created_on`) values (9,'rose','[email protected]','5','2013-04-30 14:07:51'); 

謝謝

+1

給你給人以樣本記錄你想要的結果? –

+0

在此有任何錯誤? – Kangkan

+0

它不會總是給你第一個創建,雖然可能會。它給你的是未定義的。 – Kickstart

回答

3

要獲取最新的收費是這樣的: -

SELECT s.* , f.* 
FROM tb_student s 
INNER JOIN 
    (SELECT email, MAX(created_on) AS created_on 
    FROM tb_fees 
    GROUP BY email) Sub1 
ON s.email = sub1.email 
INNER JOIN tb_fees f 
ON s.email = f.email AND Sub1.created_on = f.created_on 
WHERE s.class = 6 

順便說一句,你可能要在電子郵件字段或索引(更好,使用tb_student id字段上tb_fees表而不是電子郵件字段並建立索引)

+0

兩個內部聯接需要時間來執行 – Athi

+0

如果索引正確(因此索引建議),聯接幾乎沒有時間執行。但是這樣做或者相當於在單個SQL調用中獲得所需結果的唯一方法(並且多個調用會更慢)。 – Kickstart

0

使用MAX組功能

SELECT s.*, f.amount,MAX(f.created_on) 
FROM tb_student s 
    INNER JOIN 
    tb_fees f 
    ON 
    s.email =f.email 
WHERE s.class = 6 
GROUP BY s.email 
+0

第一本身工作 – Athi

+0

爲什麼ü編輯的老 – Athi

+0

它會顯示所有剩餘的字段也tb_fees表 – chetan

相關問題