相关疑难解决方法(0)

计算SQL中的并发事件数

我有一个可以拨打电话的表,其中包含以下字段:

  • ID
  • 开始时间
  • 时间结束
  • 状态
  • CALL_FROM
  • 拨电至

有29万条记录加载到本地PostgreSQL数据库中.我在ID(唯一索引),starttime和endtime上添加了索引.

在stackoverflow上搜索,我发现了一些有用的SQL并将其修改为我认为逻辑上应该工作的内容.问题是查询运行了很多个小时,从不返回:

SELECT T1.sid, count(*) as CountSimultaneous
FROM calls_nov T1, calls_nov T2
WHERE
     T1.StartTime between T2.StartTime and T2.EndTime
     and T1.StartTime between '2011-11-02' and '2011-11-03'
GROUP BY
     T1.sid
ORDER BY CountSimultaneous DESC;
Run Code Online (Sandbox Code Playgroud)

有人可以建议一种方法来修复查询/索引,以便它实际工作或建议另一种方法来计算并发调用?

编辑:

解释计划:

Sort  (cost=11796758237.81..11796758679.47 rows=176663 width=35)
  Sort Key: (count(*))
  ->  GroupAggregate  (cost=0.00..11796738007.56 rows=176663 width=35)
        ->  Nested Loop  (cost=0.00..11511290152.45 rows=57089217697 width=35)
Run Code Online (Sandbox Code Playgroud)

表创建脚本:

CREATE TABLE calls_nov (
  sid varchar,
  starttime timestamp, 
  endtime timestamp, 
  call_to varchar, 
  call_from varchar, 
  status varchar);
Run Code Online (Sandbox Code Playgroud)

索引创建:

CREATE UNIQUE INDEX …
Run Code Online (Sandbox Code Playgroud)

sql postgresql performance timestamp

12
推荐指数
2
解决办法
6888
查看次数

需要Oracle SQL按天分割日期/时间范围

我希望得到一些帮助来编写一些我自己没有成功的SQL.

我有一个数据表:

ID    StartDate             EndDate
1     01/01/2000 04:30 PM   01/03/2000 06:15 AM
2     01/04/2000 08:10 AM   01/04/2000 07:25 AM
3     01/05/2000 11:00 AM   01/06/2000 03:45 AM

我需要得到以下内容:

ID    StartDate             EndDate
1     01/01/2000 04:30 PM   01/01/2000 11:59 PM
1     01/02/2000 12:00 AM   01/02/2000 11:59 PM
1     01/03/2000 12:00 AM   01/03/2000 06:15 AM
2     01/04/2000 08:10 AM   01/04/2000 07:25 AM
3     01/05/2000 11:00 AM   01/05/2000 11:59 PM
3     01/06/2000 12:00 AM   01/06/2000 03:45 AM

换句话说,按日分割日期范围.这在SQL中是否可行?

我的数据库是Oracle 11G R2,我担心由于情况我不能使用PL/SQL.

sql oracle

4
推荐指数
1
解决办法
4697
查看次数

标签 统计

sql ×2

oracle ×1

performance ×1

postgresql ×1

timestamp ×1