希望有人能帮忙解决这个问题......我有一张包含以下数据的表格:
|| *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值
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,搜索“查找未使用数字的块”)
但我不知道如何最好地实施它们。
我不介意必须对所有服务器端进行分组,但不愿意这样做。
提前干杯
艾伦
答案 0 :(得分:0)
您没有使用任何聚合函数,因此我认为您实际上不需要Group by。相反,我认为更好的方法是使用多个订单的单个选择。我想你会得到你正在寻找的结果:
SELECT
*
FROM
schedule_timings
ORDER BY
show_id, presenter_id, hourofday ASC