MySQL - 忽略表的开头和结尾的值,包括组和排序

时间:2011-03-04 11:57:36

标签: mysql

希望有人能帮忙解决这个问题......我有一张包含以下数据的表格:

表数据

|| *id* || *showid* || *presenterid* || *hourofday* || *dayofweek* 
|| 24   || 53       || 91            || 23          || 5 
|| 23   || 53       || 91            || 22          || 5
|| 22   || 52       || 90            || 21          || 5 
|| 21   || 52       || 90            || 20          || 5 
|| 20   || 52       || 90            || 19          || 5 
|| 19   || 63       || 88            || 18          || 5 
|| 18   || 71       || 86            || 17          || 5 
|| 17   || 71       || 86            || 16          || 5 
|| 16   || 71       || 86            || 15          || 5 
|| 15   || 71       || 86            || 14          || 5 
|| 14   || 49       || 75            || 13          || 5 
|| 13   || 49       || 75            || 12          || 5 
|| 12   || 49       || 75            || 11          || 5 
|| 11   || 49       || 75            || 10          || 5 
|| 10   || 48       || 74            || 9           || 5 
|| 9    || 48       || 74            || 8           || 5 
|| 8    || 48       || 74            || 7           || 5 
|| 7    || 48       || 74            || 6           || 5 
|| 6    || 54       || 91            || 5           || 5 
|| 5    || 54       || 91            || 4           || 5 
|| 4    || 54       || 91            || 3           || 5 
|| 3    || 54       || 91            || 2           || 5 
|| 2    || 54       || 91            || 1           || 5 
|| 1    || 70       || 87            || 0           || 5 

HourofDay是0到23之间的值,它与一天中的小时(PHP日期)相关,Dayofweek是与星期几(PHP日期)相当的数字。

我目前有一个查询,它按Show ID和Presenter ID对所有数据进行分组,然后返回按小时排序的数据。该组显示的第一个条目具有最低的hourofday值

SQL QUERY

SELECT 
    * 
FROM 
(
    SELECT 
        * 
    FROM
        schedule_timings
    ORDER BY 
        hourofday ASC
) as my_table_tmp 
GROUP BY 
    showid, 
    presenterid 
ORDER BY 
    hourofday ASC

查询结果:

|| *id* || *showid* || *presenterid* || *hourofday* || *dayofweek* 
|| 1    || 53       || 91            || 0           || 5         
|| 2    || 54       || 91            || 1           || 5 
|| 7    || 48       || 74            || 6           || 5 
|| 11   || 49       || 75            || 10          || 5 
|| 15   || 71       || 86            || 14          || 5 
|| 19   || 63       || 88            || 18          || 5 
|| 20   || 52       || 90            || 19          || 5 

现在,这将按预期提取数据。但是,有些值可以翻转:

|| *id* || *showid* || *presenterid* || *hourofday* || *dayofweek* 
|| 24   || 53       || 91            || 23          || 5 
|| 23   || 53       || 91            || 22          || 5 
|| 1    || 70       || 87            || 0           || 5 

分组将所有这些组合在一起。但由于它们被其他价值所分隔,而且一天中的小时数不是连续的,我需要将它们单独显示出来。

我看了一下,发现了一些顺序分组解决方案(http://www.artfulsoftware.com/infotree/queries.php,搜索“查找未使用数字的块”)

但我不知道如何最好地实施它们。

我不介意必须对所有服务器端进行分组,但不愿意这样做。

提前干杯

艾伦

1 个答案:

答案 0 :(得分:0)

您没有使用任何聚合函数,因此我认为您实际上不需要Group by。相反,我认为更好的方法是使用多个订单的单个选择。我想你会得到你正在寻找的结果:

    SELECT 
        * 
    FROM
        schedule_timings
    ORDER BY 
        show_id, presenter_id, hourofday ASC