按列值和顺序对结果进行分组

时间:2015-09-21 20:49:44

标签: mysql sql-order-by

我有这张桌子(不是实际的,但它是一个例子):

SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY id desc

我需要一个查询来以更有条理的方式获取值。

这是我目前的查询:

ID| VAL |  LOG |     DATE
6    2     bla    xx/xx/xxxx
5    6     bla    xx/xx/xxxx
4    1     bla    xx/xx/xxxx
3    3     bla    xx/xx/xxxx
2    2     bla    xx/xx/xxxx    
1    1     bla    xx/xx/xxxx

这会返回:

ID| VAL |  LOG |     DATE
5    6     bla    xx/xx/xxxx
3    3     bla    xx/xx/xxxx
6    2     bla    xx/xx/xxxx
2    2     bla    xx/xx/xxxx    
4    1     bla    xx/xx/xxxx
1    1     bla    xx/xx/xxxx

我想让它们按VAL列组织,然后通过id desc排序。 所以它应输出:

SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY id desc
GROUP BY val

正如您所看到的,VAL列上的项目都在一起。

我该如何归还?

我试过了:

<div>

但是每个VAL项只返回一行。

获得此结果的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT *
FROM logs
WHERE date BETWEEN '$begin 00:00:00' and '$end 23:59:59'
ORDER BY val desc, id desc

答案 1 :(得分:0)

您不需要时间组件进行日期比较。我建议:

SELECT l.*
FROM logs l
WHERE date >= '$begin' and date < date_add('$end', interval 1 day)
ORDER BY val desc, id desc;

如果在$end的应用程序中添加1天,则查询更简单:

SELECT l.*
FROM logs l
WHERE date >= '$begin' and date < '$end'
ORDER BY val desc, id desc;

您没有在应用层提及您正在使用的内容。通常,最好在SQL语句中使用参数而不是用户定义的字符串。