我有一个可以拨打电话的表,其中包含以下字段:
有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.
我有一个数据表:
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.