写出以下SQL:字段有:开始时间,结束时间,交易水量kwh,如果开始时间到结束时间跨小时,交易水量数据给到后一个小时一半水量
时间: 2023-11-14 15:28:41 浏览: 75
可以使用以下 SQL 语句实现:
```
SELECT
DATE_TRUNC('hour', start_time) AS hour_start_time,
DATE_TRUNC('hour', end_time) AS hour_end_time,
SUM(CASE
WHEN DATE_TRUNC('hour', start_time) = DATE_TRUNC('hour', end_time)
THEN traded_water
ELSE
CASE
WHEN start_time = DATE_TRUNC('hour', start_time)
THEN traded_water / 2
ELSE traded_water
END
END) AS traded_water_hourly
FROM
transaction_table
GROUP BY
1, 2
```
其中,`DATE_TRUNC` 函数用于将时间戳舍入到最近的小时,`CASE WHEN` 语句用于判断开始时间和结束时间是否跨小时,如果跨小时则将交易水量一分为二,最后使用 `SUM` 函数和 `GROUP BY` 语句按小时统计交易水量。
相关问题
写出以下SQL:表名称:格式化数据,字段有:开始时间,结束时间,交易水量kwh,如果开始时间到结束时间跨小时,交易水量数据给到后一个小时一半水量
下面是使用 PostgreSQL 语法的 SQL 代码:
```sql
DATE_TRUNC('hour', start_time) AS hour_start_time,
DATE_TRUNC('hour', end_time) AS hour_end_time,
SUM(CASE
WHEN DATE_TRUNC('hour', start_time) = DATE_TRUNC('hour', end_time)
THEN traded_water
ELSE
CASE
WHEN start_time = DATE_TRUNC('hour', start_time)
THEN traded_water / 2
ELSE traded_water
END
END) AS traded_water_hourly
FROM
formatted_data
GROUP BY
1, 2
```
其中,`DATE_TRUNC` 函数用于将时间戳舍入到最近的小时,`CASE WHEN` 语句用于判断开始时间和结束时间是否跨小时,如果跨小时则将交易水量一分为二,最后使用 `SUM` 函数和 `GROUP BY` 语句按小时统计交易水量。
写出以下mySQL:表名称:格式化数据,字段有:开始时间,结束时间,交易水量kwh,如果开始时间到结束时间跨小时,交易水量数据给到后一个小时一半水量
下面是使用 MySQL 语法的 SQL 代码:
```sql
SELECT
DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00') AS hour_start_time,
DATE_FORMAT(end_time, '%Y-%m-%d %H:00:00') AS hour_end_time,
SUM(CASE
WHEN DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00') = DATE_FORMAT(end_time, '%Y-%m-%d %H:00:00')
THEN traded_water
ELSE
CASE
WHEN start_time = DATE_FORMAT(start_time, '%Y-%m-%d %H:00:00')
THEN traded_water / 2
ELSE traded_water
END
END) AS traded_water_hourly
FROM
formatted_data
GROUP BY
1, 2
```
其中,`DATE_FORMAT` 函数用于将时间戳格式化为指定的字符串,`CASE WHEN` 语句用于判断开始时间和结束时间是否跨小时,如果跨小时则将交易水量一分为二,最后使用 `SUM` 函数和 `GROUP BY` 语句按小时统计交易水量。
阅读全文