2014-01-18 44 views
3
CREATE TABLE IF NOT EXISTS `accesscards` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `department` varchar(255) NOT NULL, 
    `name` varchar(255) NOT NULL, 
    `entrydates` datetime NOT NULL, PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

INSERT INTO `accesscards` (`id`, `department`, `name`, `entrydates`) VALUES 
(1, 'test', 't1', '2013-12-06 16:10:00'), 
(2, 'test', 't1', '2013-12-06 15:10:00'), 
(3, 'test', 't1', '2013-12-07 15:11:00'), 
(4, 'test', 't1', '2013-12-07 15:24:00'), 
(5, 'test', 't2', '2013-12-06 16:10:00'), 
(6, 'test', 't2', '2013-12-06 16:25:00'), 
(7, 'test', 't2', '2013-12-07 15:59:00'), 
(8, 'test', 't2', '2013-12-07 16:59:00'); 

以上是我的查詢,我想爲每天的一個人獲取記錄。那條記錄應該有一天的最短日期。我需要全程記錄該日期時間獲取每個人每天的最短日期時間的記錄

我的預期輸出here

我使用

SELECT id, MIN(entrydates) FROM accesscards WHERE 1=1 AND name!='' GROUP BY DATE(entrydates) ORDER BY id 

嘗試,但對於「T1」我的id = 1和第一排的entrydates。

請幫我一把。如果重複,則提供鏈接。

+1

你怎麼樣所以搜索?有數百個類似的問題。 – Barmar

+1

搜索'[mysql] [最大每個組]。 – Barmar

+1

你看過類似的問題嗎?他們不幫你嗎? – Barmar

回答

2
SELECT a1.* 
FROM accesscards a1 
JOIN (SELECT name, MIN(entrydates) mindate 
     FROM accesscards 
     WHERE name != '' 
     GROUP BY name, date(entrydates)) a2 
ON a1.name = a2.name AND a1.entrydates = a2.mindate 

DEMO

+0

無法正常工作。給出錯誤 – Parixit

+0

修復它,現在看演示。 – Barmar

+0

這不是我想要的。檢查[這裏](http://www.sqlfiddle.com/#!2/66c3f/2)。這是我需要的。 – Parixit

1

如果你正在使用MySQL:GROUP_CONCATSUBSTRING_INDEX

SELECT 
    DATE(entrydates) AS grouped_date, 
    GROUP_CONCAT(id ORDER BY entrydates ASC SEPARATOR ',') AS id_ordered_list, 
    SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY entrydates ASC), ',', 1) AS min_id_for_day 
FROM 
    accesscards 
WHERE 
    1=1 AND name!='' 
GROUP BY 
    DATE(entrydates) 

如果需要其他領域,除了要顯示的ID,將它添加到您選擇:

SUBSTRING_INDEX(GROUP_CONCAT(YOUR_FIELDNAME_HERE ORDER BY entrydates ASC), ',', 1) AS min_YOUR_FIELDNAME_for_day 

http://sqlfiddle.com/#!2/a2671/13

你更新了新的數據你的問題後: http://sqlfiddle.com/#!2/a2671/20

SELECT 
    DATE(entrydates) AS grouped_date, 
    SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY entrydates ASC), ',', 1) AS min_id_for_day, 
    department, 
    name, 
    SUBSTRING_INDEX(GROUP_CONCAT(entrydates ORDER BY entrydates ASC), ',', 1) AS min_entrydate_for_day 
FROM 
    accesscards 
WHERE 
    1=1 AND name!='' 
GROUP BY 
    name,DATE(entrydates) 
ORDER BY entrydates 
+0

訂購請檢查我更新的問題。謝謝! – Parixit

+0

感謝您的回答。 – Parixit

+0

用新數據更新 – aconrad

0

嘗試了這一點,這將肯定會幫你

select id,department,name,entrydates from accesscards where entrydates in (select min(entrydates) from accesscards group by to_char(entrydates,'dd-Mon-yyyy')) order by id; 
相關問題