2013-05-20 24 views
0

我有一個MySQL表,該表的結構如下:中如何獲得多行與秩序和限制

CREATE TABLE IF NOT EXISTS `salary_log` (`salary_id` int(11) NOT NULL AUTO_INCREMENT, `salary` int(11) NOT NULL, `name` varchar(200) NOT NULL, `create_date` date NOT NULL, PRIMARY KEY (`salary_id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ; 

INSERT INTO `salary_log` (`salary_id`, `salary`, `name`, `create_date`) VALUES (1, 5000, 'a', '2013-05-02'), (2, 8000, 'a', '2013-05-08'), (3, 4500, 'b', '2013-05-10'), (4,6000, 'c', '2013-05-08'), (5, 8000, 'b', '2013-05-17'); 

從上面的表格我需要獲取每個員工的最新記錄。我試過以下查詢:

SELECT * FROM `salary_log` GROUP BY `name` ORDER BY `create_date` DESC; 

但是它返回的是錯誤的數據。有人能幫助我嗎?

回答

1

試試這個:

SELECT s1.* 
FROM `salary_log` AS s1 
INNER JOIN 
(
    SELECT name, MAX(create_date) AS maxDate 
    FROM salary_log 
    GROUP BY `name` 
) AS s2 ON s1.name  = s2.name 
     AND s1.create_date = s2.maxDate;