【问题标题】:In Mysql query DATE_SUB not returning expected result在 Mysql 查询中 DATE_SUB 未返回预期结果
【发布时间】:2012-12-02 12:02:00
【问题描述】:

这是我的 Mysql 查询

SELECT COUNT(*) CallCnt,ANBCnt, t2.Duration,(ANB) Number,
  ((DATE_SUB('2012-12-10 05:22:30',
              INTERVAL (SELECT CONCAT(''',t2.Duration:0,''')) MINUTE_SECOND))) Mintime,
  ('2012-12-10 05:22:30') Maxtime,
  (1) TYPE,
  (t1.CallTypeId) 
FROM cdr_temp1_check t1
  INNER JOIN cdr_temp1_check_details t2 
  ON t1.CallTypeId=t2.CallTypeId
WHERE TimeStamp1 >= DATE_SUB('2012-12-10 05:22:30',
                              INTERVAL (SELECT CONCAT(''',t2.Duration:0,''')) MINUTE_SECOND) 
  AND TimeStamp1<='2012-12-10 05:22:30'
GROUP BY ANB 
  HAVING COUNT(*) > ANBCnt

返回的结果是

    CallCnt  ANBCnt  Duration      Number  Mintime              Maxtime                TYPE  CallTypeId
-------  ------  --------  ----------  -------------------  -------------------  ------  ----------
    267      40        25      2042011234  2012-12-10 05:20:30  2012-12-10 05:22:30       1           5
    134      20        15      9895697970  2012-12-10 05:20:30  2012-12-10 05:22:30       1           3

预期结果

    CallCnt  ANBCnt  Duration      Number  Mintime              Maxtime                TYPE  CallTypeId
-------  ------  --------  ----------  -------------------  -------------------  ------  ----------
    267      40        25      2042011234  2012-12-10 04:57:30  2012-12-10 05:22:30       1           5
    134      20        15      9895697970  2012-12-10 04:57:30  2012-12-10 05:22:30       1           3

显示问题的列是 Mintime,应该是 Maxtime minus Duration

【问题讨论】:

    标签: mysql database date select


    【解决方案1】:

    我建议你尝试不同的方法。

    鉴于 maxtime 只是您在查询中输入的字符串。您可以使用 DATE_SUB 直接减去所需的间隔

    ((DATE_SUB('2012-12-10 05:22:30',
    INTERVAL t2.Duration MINUTE))) Mintime
    

    所以您的整个查询将是:

    SELECT COUNT(*) CallCnt,ANBCnt,
    t2.Duration,(ANB) Number,
    ((DATE_SUB('2012-12-10 05:22:30',
    INTERVAL t2.Duration MINUTE))) Mintime,
    ('2012-12-10 05:22:30') Maxtime,(1) TYPE,
    (t1.CallTypeId) FROM cdr_temp1_check t1
    INNER JOIN cdr_temp1_check_details t2 ON t1.CallTypeId=t2.CallTypeId
    WHERE TimeStamp1>=DATE_SUB('2012-12-10 05:22:30',
    INTERVAL t2.Duration MINUTE) 
    AND TimeStamp1<='2012-12-10 05:22:30'
    GROUP BY ANB HAVING COUNT(*)>ANBCnt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 2016-04-12
      相关资源
      最近更新 更多