1

1か月分のデータを取得するにはどうすればよいですか? このクエリを使用して -

SELECT SLIDER_VALUE FROM TBL_ACTIVITY_TRACKS WHERE STRFTIME('%m', TRACK_DATE_TIME, 'localtime') = STRFTIME('%m', 'now', 'localtime');

Here TRACK_DATE_TIME is in yyyy-mm-dd date format.

しかし、特定の日付のデータがない場合は、その代わりにゼロまたは特定の識別子が必要です。

また、TBL_DATES を作成することでこれを実行できることも知っています。すべての日付があり、テーブルと結合したままですが、新しいテーブルを作成したくありません。

私はこれを行うことができますか?

4

2 に答える 2

2

どこかから個々の日付値を取得する必要があります。一時テーブルを作成したくない場合は、値をステートメントのサブクエリに直接埋め込むことができます。

SELECT IFNULL(Slider_Value, 'none')
FROM (SELECT '2013-10-01' AS Date
      UNION ALL
      SELECT '2013-10-02'
      UNION ALL
      SELECT '2013-10-03'
      UNION ALL
      ...
      SELECT '2013-10-31'
     ) AS ThisMonth
LEFT JOIN Tbl_Activity_Tracks ON ThisMonth.Date = date(Track_Date_Time)

SQL ステートメントを生成するコードで日を列挙したくない場合は、SQL 自体でこれを行うこともできますが、十分なゆがみがあります。

SELECT IFNULL(Slider_Value, 'none')
FROM (SELECT date('now', 'start of month') AS Date
      UNION ALL
      SELECT date('now', 'start of month', '+1 days')
      UNION ALL
      SELECT date('now', 'start of month', '+2 days')
      UNION ALL
      ...
      UNION ALL
      SELECT date('now', 'start of month', '+27 days')
      UNION ALL
      SELECT date('now', 'start of month', '+28 days') WHERE strftime('%m', 'now', 'start of month', '+28 days') = strftime('%m', 'now')
      UNION ALL
      SELECT date('now', 'start of month', '+29 days') WHERE strftime('%m', 'now', 'start of month', '+29 days') = strftime('%m', 'now')
      UNION ALL
      SELECT date('now', 'start of month', '+30 days') WHERE strftime('%m', 'now', 'start of month', '+30 days') = strftime('%m', 'now')
     ) AS ThisMonth
LEFT JOIN Tbl_Activity_Tracks ON ThisMonth.Date = date(Track_Date_Time)

(最後の 3 つの WHERE 句は、31 日未満の月の場合、現在の月に含まれなくなった日を省略します。)

于 2013-10-21T06:41:04.567 に答える