2016-09-15 4 views
0

タイトルが示唆しているように、でMySQLにテーブルを結合したいのですが、 DateTimeフィールドの行間の時間を計算できます。MySQL:自己結合表が1行分オフセットされている(T-SQL CTEとROW_NUMBER()が等しい)

T-SQLでは、これはROW_NUMBER()とCTEを使用して行われます。

+0

データは代替方法を考慮してもよい。私はあなたのデータのサンプルと期待される結果を提供することをお勧めします。 –

答えて

0

row_numberは、変数を使用してmysqlでシミュレートできます。たとえば、与えられた MariaDB [sandbox]> select * from dates limit 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:[email protected]+1 rownumber from 
(select @rn:=0) rn,dates d 
) s 
join 
(
select d.*,@rn1:[email protected]+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上の他の例の負荷があります。

関連する問題