我有一个像这样的table_db
ID DATA PRICE
1 2014-01-01 10
2 2014-01-02 10
3 2014-01-03 10
4 2014-01-04 10
5 2014-01-01 20
6 2014-01-01 20
7 2014-01-01 30
8 2014-01-01 30
我喜欢一个给我输出的SQL查询
from 2014-01-01 to 2014-01-04 price is 10
from 2014-01-05 to 2014-01-06 price is 20
from 2014-01-08 to 2014-01-08 price is 30
我该怎么办?
答案 0 :(得分:0)
按日期排序表(ASC),然后执行以下操作:
$result; //array with DB result
for($i = 0; $i<count($result); $i++)
if(isset($result[$i+1])
echo 'From' . $result [$i] ['data'] . ' to '. $result [$i+1] ['data'] . ' price is ' . $result [$i] ['price'];
答案 1 :(得分:0)
例如......
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,date DATE NOT NULL
,price INT NOT NULL
);
INSERT INTO my_table VALUES
(1 ,'2014-01-01', 10),
(2 ,'2014-01-02', 10),
(3 ,'2014-01-03', 10),
(4 ,'2014-01-04', 10),
(5 ,'2014-01-05', 20),
(6 ,'2014-01-06', 20),
(7 ,'2014-01-07', 10),
(8 ,'2014-01-08', 10);
SELECT a.date start
, MIN(c.date) end
, a.price
FROM my_table a
LEFT
JOIN my_table b
ON b.price = a.price
AND b.id = a.id - 1
LEFT
JOIN my_table c
ON c.price = a.price
AND c.id >= a.id
LEFT
JOIN my_table d
ON d.price = a.price
AND d.id = c.id + 1
WHERE b.id IS NULL
AND c.id IS NOT NULL
AND d.id IS NULL
GROUP
BY a.id;
+------------+------------+-------+
| start | end | price |
+------------+------------+-------+
| 2014-01-01 | 2014-01-04 | 10 |
| 2014-01-05 | 2014-01-06 | 20 |
| 2014-01-07 | 2014-01-08 | 10 |
+------------+------------+-------+
请注意,此特定解决方案假定ID是连续的。