DECLARE @MyTable TABLE
(
CallTime DATETIME,
CallLength INT,
Channel INT
)
INSERT INTO @MyTable
(CallTime, CallLength, Channel)
VALUES
('06-26-2014 12:00:00', 22, 1),
('06-26-2014 12:00:05', 15, 2),
('06-26-2014 12:00:10', 20, 3),
('06-26-2014 12:00:15', 10, 4);
DECLARE @number_of_numbers INT = 100000;
;WITH
a AS (SELECT 1 AS i UNION ALL SELECT 1),
b AS (SELECT 1 AS i FROM a AS x, a AS y),
c AS (SELECT 1 AS i FROM b AS x, b AS y),
d AS (SELECT 1 AS i FROM c AS x, c AS y),
e AS (SELECT 1 AS i FROM d AS x, d AS y),
f AS (SELECT 1 AS i FROM e AS x, e AS y),
numbers AS
(
SELECT TOP(@number_of_numbers)
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS number
FROM f
)
SELECT
d.CheckTime,
MAX(CASE WHEN m.Channel = 1 THEN 1 ELSE 0 END) Channel1,
MAX(CASE WHEN m.Channel = 2 THEN 2 ELSE 0 END) Channel2,
MAX(CASE WHEN m.Channel = 3 THEN 3 ELSE 0 END) Channel3,
MAX(CASE WHEN m.Channel = 4 THEN 4 ELSE 0 END) Channel4
FROM
(
SELECT DATEADD(SECOND, n.number, '06/26/2014') CheckTime
FROM numbers n
) AS d
INNER JOIN @MyTable m
ON d.CheckTime >= m.CallTime AND d.CheckTime <= DATEADD(SECOND, m.CallLength, m.CallTime)
GROUP BY d.CheckTime
在这里你创建号码表,然后用它来创建每一天的第二个时隙,那么你可以加入一个例子对你的桌子和使用组你可以找到所有活跃的渠道。
感谢您的回应。我在MySQL中这样做,所以有些不解析。我试图将其转换,但我对主要逻辑不清楚。这件作品是什么?: '; WITH' 'a AS(SELECT 1 AS i UNION ALL SELECT 1),' 'b AS(SELECT 1 AS i FROM AS x,a AS y),' 'AS AS(SELECT 1 AS i FROM FROM AS x,b AS y)',' ' AS 0,ASY),' ''AS(SELECT AS AS FROM FROM AS x,e AS y)', ' ()OVER(ORDER BY(SELECT NULL))AS号码' 'FROM f' ')' – genevish
刚刚创建一个数字表,这里是一些数字表代码为mysql:http://stackoverflow.com/qu estions/9751318 /创建-A-数表,在MySQL的 –