2013-11-23 109 views
1

从下表中,我试图通过timestamp desc选择distinct(id)order它们。但我似乎没有得到正确的结果。通过时间戳排序不正确

"id" "head" "type" "updated" "userId" "addedDate" 
"1"  "2"  "0"  "1"   "1"   "2013-11-23 21:09:23" 
"1"  "2"  "1"  "1"   "1"   "2013-11-23 21:09:40" 
"2"  "2"  "0"  "1"   "1"   "2013-11-23 21:09:44" 
"2"  "2"  "1"  "0"   "1"   "2013-11-23 21:09:47" 

我的查询

select distinct(id) as id, addedDate from test 
where userId = 1 group by id order by addedDate desc; 

目前的结果

​​

预期的效果

"id" "addedDate" 
"2"  "2013-11-23 21:09:47" //The one that was added last 
"1"  "2013-11-23 21:09:40" //The one that was added last 
+2

'选择ID,MAX(addedDate)AS max_addedDate从测试其中userid = 1组由ID以便通过max_addedDate递减;' –

+0

@ypercube您的回答运作良好。 – jmenezes

+0

@ypercube如果我不想在select中选择max(addedDate),但仍想让它们按max(addedDate)排序,那么它怎么可能呢? – jmenezes

回答

-1

尝试加上一句:

HAVING MAX(addedDate) 
-1

尝试做这样的:通过转换(日期时间,addedDate,103)DESC

SELECT DISTINCT ID从测试ORDER BY顺序;

convert()会将日期转换成一个varchar,这将很容易确定。

1

您的查询使用GROUP BY的方式错误。你想找到的每id最大addedDate

SELECT id, MAX(addedDate) AS max_addedDate 
FROM test 
WHERE userId = 1 
GROUP BY id 
ORDER BY max_addedDate DESC ; 

即使你不希望显示在列表SELECT最大日期,你仍然可以使用它的ORDER BY子句中:

SELECT id 
FROM test 
WHERE userId = 1 
GROUP BY id 
ORDER BY MAX(addedDate) DESC ; 

如果您有不同的要求(如您在评论中提及的),并且您还希望显示表中的更多列(但对于每个ID最大日期的行仍然存在),则可以将上述查询与加入:

SELECT t.id, t.addedDate, t.type   -- whatever columns you want from `t` 
FROM test AS t 
    JOIN 
    (SELECT id, MAX(addedDate) AS addedDate 
     FROM test 
     WHERE userId = 1 
     AND head = 2 
     GROUP BY id 
    ) AS m 
    ON m.id = t.id 
    AND m.addedDate = t.addedDate 
WHERE t.userId = 1 
    AND t.head = 2 
ORDER BY t.addedDate DESC ; 
+0

你第二个不通过addedDate desc命令。注意:我在select中添加了id旁边的一列。这是否会导致问题? – jmenezes

+0

排序正确。另一列显示半随机结果。 –

+0

任何机会,我们可以得到正确的结果,而不使用选择max()?因为我使用PDO :: FETCH_KEY_PAIR将值放入数组中。 – jmenezes