我有一个类似于以下事件的MySQL表:
+----+------------+-----------+----------+----------+
| id | date | starttime | endtime | location |
+----+------------+-----------+----------+----------+
| 1 | 2018-12-22 | 18:00:00 | 21:30:00 | 3 |
| 2 | 2018-12-23 | 18:00:00 | 21:30:00 | 2 |
| 3 | 2018-12-25 | 18:00:00 | 21:30:00 | 1 |
| 4 | 2018-12-21 | 07:00:00 | 10:30:00 | 3 |
| 5 | 2018-12-21 | 18:00:00 | 21:30:00 | 3 |
+----+------------+-----------+----------+----------+
我要做的是列出按位置分组的每个事件的详细信息。例如,上面的数据将导致:
Location: 1
Date(s): 2018-12-25
Time(s): 18:00:00 - 21:30:00
Location: 2
Date(s): 2018-12-23
Time(s): 18:00:00 - 21:30:00
Location: 3
Date(s): 2018-12-21 | 2018-12-22
Time(s): 07:00:00 - 10:30:00 or 18:00:00 - 21:30:00 | 18:00:00 - 21:30:00
独立的while循环显示每个位置,除非我在查询中分组。如果我检查最后一个位置是否等于当前位置,我将超过查询中的分组依据,但如果该位置有多个日期/时间,则无法将日期和时间与位置相关联。我已经能够通过在while循环中重新查询来完成我需要的东西,但我认为必须有更好,更有效的方法。最后,如果您注意到,我在多个日期/时间之间使用了“|”作为分隔符。即使我按照上面提到的那样得到结果列出,我也似乎无法在最后一次列表后显示最后一个“|”。
答案 0 :(得分:0)
有几种方法
首先填充位置
# Inputs: STA−1, STA−2, STA−3, ..., STA−n
set stations [list "STA−1" "STA−2" "STA−3"]
# Shared Variables:
# for every i, 1 ≤ i ≤ n
# counter[i] ∈ { / 0, 1, 2,..., N}, initially 0, updated by stations
array set counter {}
set n 10
set i 0
while {$i < $n} {
set counter($i) 0
incr i
}
使用foreach
检索第一个查询q1 = "SELECT DISTINCT(location) FROM Table ORDER BY location;"
答案 1 :(得分:0)
尝试此查询:
Select group_concat(date seperator ,'|'), group_concat(starttime ,'|', endtime ) timings, location from tablename group by location order by location