0

Trucksと という2 つの日付列を持つテーブルがありArrivalますReleased。次のように、これらの日付間の平均日数を計算できます。

SELECT avg(julianday(released) - julianday(arrival)) 
FROM Trucks

ただし、平日のみをカウントする必要があります。つまり、土曜日と日曜日は無視したいと考えています。SQLiteでこれを行う方法はありますか? Oracle や MSSQL などのより堅牢な RDBMS のソリューションを見てきましたが、SQLite で機能するものはありません。

4

3 に答える 3

3

arrival日数の生の差は、およびの曜日に応じて (のみ) 調整する必要がありますreleased

rel arr|0 1 2 3 4 5 6
-------+-+-+-+-+-+-+-
  0    |2 0 0 0 0 0 1
  1    |2 2 0 0 0 0 1
  2    |2 2 2 0 0 0 1
  3    |2 2 2 2 0 0 1
  4    |2 2 2 2 2 0 1
  5    |2 2 2 2 2 2 1
  6    |2 2 2 2 2 2 2

この数値は、単純な式 (ここでは内部の CASE 式) で計算できます。

SELECT
AVG(julianday(released) - julianday(arrival) -
    CASE WHEN julianday(released) = julianday(arrival) THEN 0
    ELSE (CAST((julianday(released) - julianday(arrival)) / 7 AS INTEGER) * 2
         ) +
      CASE WHEN strftime('%w', arrival) <= strftime('%w', released) THEN 2
           ELSE strftime('%w', arrival) = '6'
      END
    END)
FROM trucks

( のようなブール式x='6'は 0 または 1 を返します。)

于 2013-11-05T20:49:26.003 に答える