[英]MySQL: Self join table offset by one row (equiv to T-SQL CTE with ROW_NUMBER())
就像标题所暗示的那样,在MySQL中 ,我想将一个表与其自身连接,偏移1行,以便可以为DateTime字段计算行之间的时间。
在T-SQL中,这将使用ROW_NUMBER()和CTE完成。
可以在mysql中使用变量模拟row_number。 例如,给定MariaDB [sandbox]>从日期限制10中选择*;
+------+------------+----------+------------------+-------------------+--------+
| id | dte | CalMonth | CalMonthDescLong | CalMonthDescShort | calQtr |
+------+------------+----------+------------------+-------------------+--------+
| 1 | 2000-01-01 | 1 | January | Jan | 1 |
| 2 | 2000-01-02 | 1 | January | Jan | 1 |
| 3 | 2000-01-03 | 1 | January | Jan | 1 |
| 4 | 2000-01-04 | 1 | January | Jan | 1 |
| 5 | 2000-01-05 | 1 | January | Jan | 1 |
| 6 | 2000-01-06 | 1 | January | Jan | 1 |
| 7 | 2000-01-07 | 1 | January | Jan | 1 |
| 8 | 2000-01-08 | 1 | January | Jan | 1 |
| 9 | 2000-01-09 | 1 | January | Jan | 1 |
| 10 | 2000-01-10 | 1 | January | Jan | 1 |
+------+------------+----------+------------------+-------------------+--------+
10 rows in set (0.00 sec)
这个查询
select s.*
,t.dte,t.rownumber1
from
(
select d.*,@rn:=@rn+1 rownumber from
(select @rn:=0) rn,dates d
) s
join
(
select d.*,@rn1:=@rn1+1 rownumber1 from
(select @rn1:=0) rn,dates d
) t on t.rownumber1 = s.rownumber + 1
limit 10
退货
+-----------+------------+------------+
| id | dte | CalMonth | CalMonthDescLong | CalMonthDescShort | calQtr | rownumber | dte | rownumber1 |
+------+------------+----------+------------------+-------------------+--------+-----------+------------+------------+
| 1 | 2000-01-01 | 1 | January | Jan | 1 | 1 | 2000-01-02 | 2 |
| 2 | 2000-01-02 | 1 | January | Jan | 1 | 2 | 2000-01-03 | 3 |
| 3 | 2000-01-03 | 1 | January | Jan | 1 | 3 | 2000-01-04 | 4 |
| 4 | 2000-01-04 | 1 | January | Jan | 1 | 4 | 2000-01-05 | 5 |
| 5 | 2000-01-05 | 1 | January | Jan | 1 | 5 | 2000-01-06 | 6 |
| 6 | 2000-01-06 | 1 | January | Jan | 1 | 6 | 2000-01-07 | 7 |
| 7 | 2000-01-07 | 1 | January | Jan | 1 | 7 | 2000-01-08 | 8 |
| 8 | 2000-01-08 | 1 | January | Jan | 1 | 8 | 2000-01-09 | 9 |
| 9 | 2000-01-09 | 1 | January | Jan | 1 | 9 | 2000-01-10 | 10 |
| 10 | 2000-01-10 | 1 | January | Jan | 1 | 10 | 2000-01-11 | 11 |
+------+------------+----------+------------------+-------------------+--------+-----------+------------+------------+
10 rows in set (0.09 sec)
SO上还有许多其他示例可能会更适合您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.