解決這個問題的難題是一個很好的挑戰。 但我想我已經得到了你需要的答案。
創建表/插入數據
CREATE TABLE consume
(`DateTime` VARCHAR(10), `Type` VARCHAR(3), `size` INT, `total` INT, `seq_id` INT)
;
INSERT INTO consume
(`DateTime`, `Type`, `size`, `total`, `seq_id`)
VALUES
('12-01-2016', 'abc', 15, 50, 3),
('13-01-2016', 'abc', 16, 50, 4),
('13-01-2016', 'abc', 16, 50, 5),
('14-01-2016', 'abc', 20, 50, 6),
('14-01-2016', 'pqr', 10, 50, 7),
('15-01-2016', 'abc', 25, 50, 8)
;
你所面臨的問題是要得到你需要的,所以你可以計算出日期之間的差值數據.. 請注意日期,需要在該查詢的序列能夠正常工作。像14-01-2016,15-01-2016,16-01-2016,(....)
SELECT DISTINCT
consume1.Type
, consume1.DateTime
, consume1.size
, consume2.DateTime
, consume2.size
, (consume2.size - consume1.size) size_diff
FROM
consume consume1
INNER JOIN
consume consume2
ON
consume1.DateTime < consume2.DateTime
WHERE
consume1.type = 'abc'
AND
consume2.type = 'abc'
AND
((consume2.DateTime - consume1.DateTime) = 1)
ORDER BY
consume1.seq_id ASC
結果
Type DateTime size DateTime size size_diff
------ ---------- ------ ---------- ------ -----------
abc 12-01-2016 15 13-01-2016 16 1
abc 13-01-2016 16 14-01-2016 20 4
abc 14-01-2016 20 15-01-2016 25 5
現在你有正確的數據,您可以使用此查詢計算每日平均增長量。 它使用上述查詢作爲交付表。但它只會選擇你需要的字段。
SELECT
TYPE
, AVG(size_diff) daily_avg_growth
FROM (
SELECT DISTINCT
consume1.Type
, (consume2.size - consume1.size) size_diff
FROM
consume consume1
INNER JOIN
consume consume2
ON
consume1.DateTime < consume2.DateTime
WHERE
consume1.type = 'abc'
AND
consume2.type = 'abc'
AND
((consume2.DateTime - consume1.DateTime) = 1)
ORDER BY
consume1.seq_id ASC
) AS consume_per_day_filter
結果
Type daily_avg_growth
------ ------------------
abc 3.3333
現在你知道類型ABC每日平均增長。 現在我們可以用這個查詢來計算需要的天數((total- [max size])/ [daily avg growth])((50 - 25)/ 3.3333)= 7.5天。注意在查詢中使用CEIL,因此結果爲8天 它將上面的查詢用作交付表。
SELECT
consume.Type
, CEIL((consume.total - MAX(consume.size))/daily_avg_growth) "days_needed_to_50"
FROM
consume
CROSS JOIN (
SELECT
TYPE
, AVG(size_diff) daily_avg_growth
FROM (
SELECT DISTINCT
consume1.Type
, (consume2.size - consume1.size) size_diff
FROM
consume consume1
INNER JOIN
consume consume2
ON
consume1.DateTime < consume2.DateTime
WHERE
consume1.type = 'abc'
AND
consume2.type = 'abc'
AND
((consume2.DateTime - consume1.DateTime) = 1)
ORDER BY
consume1.seq_id ASC
)
AS consume_per_day_filter
)
AS consume_per_day_filter_sum
WHERE
consume.type = 'abc'
結果
Type days_needed_to_50
------ -------------------
abc 8
你的表沒有主鍵。及時,這可能會有問題。 – Strawberry
對不起,我忘了在創建示例時添加主鍵 - 現在編輯我的問題 –
好。而且,這個表格中存儲的50個設計看起來很糟糕,對吧? – Strawberry