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)

(对于少于 31 天的月份,最后三个 WHERE 子句省略了当前月份中不再存在的日期。)

于 2013-10-21T06:41:04.567 回答
0

您只需在 ArrayList 中传递数据库查询返回值,然后您就可以得到 ArrayList 的size ()。如果它大于零,您可以对其进行操作,否则如果没有数据,您可以传递零或执行相应的操作

于 2013-10-21T05:38:33.327 回答