2012-09-24 28 views
0

嗨目前我有代码将显示10分钟间隔最后一小时的记录总和。sqlite查询需要调整一点

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。 (高) 2)time_slot应该从当前time_stamp计算(中)

帮助这是有用的,好心的建议我一些解决方案非常感谢时间。

回答

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

嗨CL非常感谢曾经again..I答复将采取点数2和3。对于1号点我不能创建所有字段都为“0”的虚拟槽,因为只有当我们点击某个特定的dom元素时才会创建命令,并且映射也将通过三个表完成。它真的不可能添加虚拟记录。并会尝试与其他一些替代品非常感谢。 – Harry