根据条件选择其他列,然后选择分组条件子句中包含的列

时间:2019-02-07 09:54:13

标签: sql tsql group-by

我需要根据fkIdDateFrom对记录进行分组,还需要选择TimeFrom第一条记录和TimeTo从第二条记录

pkID |  fkID  | DateFrom          | TimeFrom  | TimeTo
104  |  20    | 05-02-2019 00:00  | 12:00     | 23:59
105  |  20    | 06-02-2019 00:00  | 00:00     | 12:00
106  |  20    | 06-02-2019 00:00  | 12:00     | 23:59
107  |  20    | 07-02-2019 00:00  | 00:00     | 12:00

常规GROUP BY不允许将TimeFrom和TimeTo包括在选择查询中。

数据就是这样,日期1行或2行,1行仅表示AM或PM,2行表示AM和PM两者。

SELECT fkID, DateFrom --, TimeFrom
FROM table 
GROUP BY fkID, DateFrom

所以所需的输出将是这样:

fkID |  DateFrom         | TimeFrom |  TimeTo
20   |  05-02-2019 00:00 |  12:00   |   23:59
20   |  06-02-2019 00:00 |  00:00   |   23:59
20   |  07-02-2019 00:00 |  00:00   |   12:00

因此对于日期06-02-2019 00:00,将dateFrom和DateTo合并为一行。

2 个答案:

答案 0 :(得分:3)

如果对应于同一组的间隔没有间隔和重叠,则可以简单地使用GROUP BY。我假设TimeFromTimeToTime数据类型。

select fkID, dateFrom,
       min(TimeFrom),
       max(TimeTo)
from your_table
group by fkID, dateFrom

答案 1 :(得分:2)

通过放置{% for user in location %} <h5><b>{{ user.first_name }} {{ user.last_name }}</b></h5> {% endfor %} 子句,您可以将group by放在max中,例如

TimeTo

它将为您提供所需的输出。