首页 > 解决方案 > 根据条件选择包含在 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 行表示仅上午或下午,2 行表示上午和下午。

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

因此对于 Date 06-02-2019 00:00,将 dateFrom 和 DateTo 组合在一行中。

标签: sqltsqlgroup-by

解决方案


如果对应于同一组的间隔没有间隙和重叠,那么您可以简单地使用GROUP BY. 我假设TimeFrom并且TimeToTime数据类型。

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

推荐阅读