我有这个表更改,我在其中存储来自另一个表的更改:
changes
----------------------------
|id| dat |sid| des |
----------------------------
| 1|2015-12-08| 0| change1|
| 2|2015-12-09| 0| change2|
| 3|2015-12-10| 0| change3|
| 4|2015-12-06| 1| change1|
表格在des列中包含特定sid的日期更改。 每行分别在dat列中存储迄今为止有效的旧值des。
我需要创建此输出:
result
-----------------------------------
|sid| _from | _to | des |
-----------------------------------
| 0| start|2015-12-08|change1|
| 0|2015-12-08|2015-12-09|change2|
| 0|2015-12-09|2015-12-10|change3|
| 1| start|2015-12-06|change1|
我正在使用此查询:
SELECT
`m`.`sid`,
IFNULL((SELECT `s`.`dat`
FROM `changes` `s`
WHERE ((`s`.`sid` = `m`.`sid`) AND (`s`.`dat` < `m`.`dat`))
ORDER BY `s`.`dat` desc LIMIT 1), 'start') AS `_from`,
`m`.`dat` AS `_to`,
`m`.`des`
FROM `changes` `m`
是否有更好的解决方案(就查询处理速度而言)?
谢谢
最佳答案
你可以试试这个:
SELECT
sid
, IF(@sid_old = sid, dat, 'START')
, dat AS _to
, des
, @sid_old := sid AS dummy
FROM changes
, (SELECT @sid_old := '') AS tmp
ORDER BY sid, dat;
关于mysql - 如何从单列创建具有日期间隔的虚拟列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34150845/