Tôi có bảng chứa danh mục, ngày và tỷ lệ. Mỗi danh mục có thể có các mức giá khác nhau cho các ngày khác nhau, một danh mục chỉ có thể có một tỷ lệ tại một ngày cụ thể.Cách nhóm các phạm vi liên tục bằng cách sử dụng MySQL
Id CatId Date Rate
------ ------ ------------ ---------
000001 12 2009-07-07 1
000002 12 2009-07-08 1
000003 12 2009-07-09 1
000004 12 2009-07-10 2
000005 12 2009-07-15 1
000006 12 2009-07-16 1
000007 13 2009-07-08 1
000008 13 2009-07-09 1
000009 14 2009-07-07 2
000010 14 2009-07-08 1
000010 14 2009-07-10 1
index Unique (CatID, Date, Rate) Tôi muốn cho từng loại vào nhóm tất cả các ngày dao động liên tục và giữ chỉ bắt đầu và kết thúc của dãy núi này. Đối với ví dụ trước, chúng ta sẽ có:
CatId Begin End Rate
------ ------------ ------------ ---------
12 2009-07-07 2009-07-09 1
12 2009-07-10 2009-07-10 2
12 2009-07-15 2009-07-16 1
13 2009-07-08 2009-07-09 1
14 2009-07-07 2009-07-07 2
14 2009-07-08 2009-07-08 1
14 2009-07-10 2009-07-10 1
Tôi tìm thấy một giải pháp tương tự trong the forum mà không chính xác cho kết quả
WITH q AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY CatId, Rate ORDER BY [Date]) AS rnd,
ROW_NUMBER() OVER (PARTITION BY CatId ORDER BY [Date]) AS rn
FROM my_table
)
SELECT CatId AS catidd, MIN([Date]) as beginn, MAX([Date])as endd, Rate
FROM q
GROUP BY CatId, rnd - rn, Rate
SEE SQL FIDDLE Làm thế nào tôi có thể làm điều tương tự trong mysql ? Xin vui lòng giúp đỡ!
Tại sao ví dụ hiển thị của bạn cho '(CatID, Rate) = (14,1) 'phạm vi kết quả từ' 2009-07-08' đến '2009-07-10' khi không có' 2009-07-09' trong bảng bên dưới? c.f. '(CatId, Rate) = (12,1)', tạo ra hai dãy kết quả do sự gián đoạn của nó. – eggyal
Cảm ơn eggyal, bây giờ nó đã sửa chữa – Fouzi