在P A解决方案没有存储过程茜SQL:Fiddle
SELECT sku
, COUNT(1) AS consecutive_days
, SUM(items) AS items
FROM
(
SELECT sku
, items
-- generate a new guid for each group of consecutive date
-- ie : starting with day_before is null
, @guid := IF(@sku = sku and day_before IS NULL, UUID(), @guid) AS uuid
, @sku := sku AS dummy_sku
FROM
(
SELECT currents.sku
, befores.record_date as day_before
, currents.items
FROM sales currents
LEFT JOIN sales befores
ON currents.sku = befores.sku
AND currents.record_date = befores.record_date + INTERVAL 1 DAY
ORDER BY currents.sku, currents.record_date
) AS main_join
CROSS JOIN (SELECT @sku:=0) foo_sku
CROSS JOIN (SELECT @guid:=UUID()) foo_guid
) AS result_to_group
GROUP BY uuid, sku
查询是真的没有那么难。通过cross join (SELECT @type:=0) type
声明变量。然后在选择中,您可以逐行设置变量值。模拟秩函数是必要的。
我认为你需要递归连接来实现MySQL不可能实现的功能。你可以在数据库上创建存储过程吗? – Benos 2013-04-26 06:36:39
是的,服务器是我的。 – 2013-04-26 06:40:15