0

嗨,目前我有代码,它将以 10 分钟的间隔显示最后一小时的记录总和。

SELECT SUM(NO_OF_ADULT) AS ADULT
     , SUM(NO_OF_ADULT_F) AS ADULT_F
     , SUM(NO_OF_CHILDREN) AS CHILDREN
     , SUM(NO_OF_CHILDREN_F) AS CHILDREN_F
     , SUM(NO_OF_SENIOR_CITIZEN) AS SENIOR
     , SUM(NO_OF_SENIOR_CITIZEN_F) AS SENIOR_F
     , SUM(NO_OF_INFANT) AS INFANT
     , SUM(NO_OF_INFANT_F) AS INFANT_F
     , SUBSTR(END_TIME_OF_SERVICE, 1, 4) || '0 - ' || SUBSTR(END_TIME_OF_SERVICE, 1, 4) || '9' AS TIME_SLOT
  FROM CLNT_RESERVATION RES
      , CLNT_ORDER ORD
      , CLNT_ORDER_CHEQUE_RESERVATION_MAPPING RM
  WHERE RES.START_DATE_OF_SERVICE ="2012-09-24"
    AND ORD.ENT_CODE="****"
    AND ORD.BRANCH_CODE="******"
    AND ORD.STATION_CODE="*******"
    AND RES.STATION_CODE=ORD.STATION_CODE 
    AND ORD.ORDER_STATUS <> 111 
    AND ORD.ORDER_ID=RM.ORDER_ID 
    AND (ORD.CREATE_TIME LIKE "2012-09-24%" OR ORD.UPDATE_TIME LIKE "2012-09-24%")
    AND ORD.STATUS_FLG ="A"
    AND ORD.DELETE_FLG="N" 
    AND RM.RESERVATION_ID = RES.RESERVATION_ID 
    AND (strftime("%H:%M", RES.END_TIME_OF_SERVICE) BETWEEN strftime("%H:%M",TIME("now","localtime","-1 hour","-00 minutes")) 
    AND strftime ("%H:%M",TIME("now","localtime")) OR strftime("%H:%M", RES.END_TIME_OF_SERVICE) BETWEEN strftime("%H:%M",TIME("now","localtime","-1 hour","-00 minutes")) 
    AND strftime("%H:%M",TIME("now","localtime")) ) 
GROUP BY 9

这将给出以下输出

ADULT  ADULT_F  CHILDREN CHILDREN_F SENIOR SENIOR_F INFANT INFANT_F  TIME_SLOT

 0       0         0       0          1        1      0      0     12:00 - 12:09
 1       0         0       0          0        1      0      0     12:30 - 12:39

现在您可以看到 12:10 - 12:29 的值不在数据库中,因此也不会显示。

我期待的是: - 1)需要创建行并在所有字段中简单地填写 0。(high) 2) time_slot 应该从当前的 time_stamp 计算。(medium)

帮助这很有帮助,请给我一些解决方案,非常感谢您的时间。

4

1 回答 1

0
  1. 数据库不会为不存在的数据创建记录。
    如果您想获取所有时隙的记录(并且在读取结果时无法在应用程序中处理此问题),则必须将填充为零的记录添加到表中。(您可以对所有需要的时间段盲目地执行此操作,因为总和不会受到影响。)
  2. 对于 SQL 中的字符串,请始终使用“单引号”。SQLite 将接受双引号以与其他一些 SQL 引擎兼容,但是如果您曾经有一些具有相同名称的列,您将遇到难以发现的错误。
  3. 你不需要那些TIME(...)电话;你可以strftime('%H:%M','now','localtime')直接使用。
  4. 要根据当前时间获得十分钟的时间段,您必须在不将时间拆分为 h/m/s 字段的情况下进行计算。这已经在上一个问题中显示:
SELECT DATETIME(strftime('%s', SERVICE) +
                ((strftime('%s', 'now') - strftime('%s', SERVICE))
                 % (60 * 10)),
                'unixepoch') ...
于 2012-09-24T08:05:45.283 回答