【问题标题】:How to get the last month of data in database?如何获取数据库中上个月的数据?
【发布时间】:2016-09-16 11:45:29
【问题描述】:

我需要最后一个月的记录数据,而不是当前日期-1个月的数据。

这是我的错误查询:D

SELECT  MIN(date(Timestamp)) as fDate , MAX(date(Timestamp)) as tDate  FROM data WHERE boxid=45 AND
 YEAR(Timestamp) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(Timestamp) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)

编辑:我的表中有很多数据,我只想查看最后重新编码的数据从哪里开始以及在哪里结束,但我想要最后一个月。

例如,表格已重新编码至 1 月 17 日。 我现在想要 2 个日期:1 月 1 日和 17 日

我试过了

SELECT max(date(Timestamp)) as toDate, min(date(timestamp)) as fromDate FROM data WHERE timestamp<=(SELECT MAX(date(Timestamp)) FROM data )
AND timestamp>=(SELECT (MAX(date(Timestamp))- INTERVAL 1 MONTH) FROM data ) AND ID=10

它有一个奇怪的行为,它给我的时间不是 30 天......

【问题讨论】:

  • 尝试选择过去 30 天的查询?
  • 是的,我需要最后一个月,实际上只有两个日期,最后几个月的数据开始和结束的地方,这就是我使用 max() 和 min() 的原因
  • @Khan,如果我没记错的话,您的数据日期如“2016-08-01”、“2016-08-13”、“2016-08-17”、“2016” -09-01”、“2016-09-02”、“2016-09-03”。现在您要选择日期与“2016-08-01”、“2016-08-13”、“2016-08-17”匹配的记录。对吗?
  • 然后你需要做一个第一次选择来获取最后一个时间戳并使用它而不是 CURRENT_DATE

标签: mysql sql date


【解决方案1】:

好吧,为了尝试这个,我创建了一个名为“recordings”的表,其中仅包含id(整数)和timestamp(时间戳)。

这是表格的内容:

SELECT * FROM `recordings` WHERE `timestamp` <= ( SELECT `timestamp` FROM `recordings` ORDER BY `timestamp` DESC LIMIT 1 ) AND `timestamp` >= (( SELECT `timestamp` FROM `recordings` ORDER BY `timestamp` DESC LIMIT 1 ) - INTERVAL 1 MONTH))

我得到了这个: 这正是上一个前 1 个月的录音

【讨论】:

  • 这就是我需要的,但它给了我一个语法错误:( #1064
  • 您能复制并粘贴您的确切查询吗?
  • 我复制了您的查询并用数据替换了录音
  • 时间戳呢?你换案子了吗?我也忘记了答案中的勾号(`),这可能会导致错误,具体取决于您的 MySQL 版本 - 我已经更正了它,因为
【解决方案2】:

最后一个可用数据月份的第一天由以下给出:

MAX(DATE(`Timestamp`)) - INTERVAL (DAYOFMONTH(`Timestamp`) - 1 ) DAY
-- e.g., 2016-09-16 - INTERVAL (16 - 1) DAY => 2016-09-01

最新的可用日期是

MAX(DATE(`Timestamp`))

所以你可以

SELECT last_day - INTERVAL (DAYOFMONTH(last_day) - 1) DAY AS first_day,
       last_day
  FROM (SELECT MAX(DATE(`Timestamp`)) AS last_day FROM data) derived;

(当然,你不需要那个派生表,但我发现它比一遍又一遍地重复 max(date(`blah`)) 更具可读性。)

【讨论】:

    【解决方案3】:
    SELECT * 
    FROM Member
    WHERE DATEPART(m, date_created) = DATEPART(m, DATEADD(m, -1, getdate()))
    AND DATEPART(yyyy, date_created) = DATEPART(yyyy, DATEADD(m, -1, getdate()))
    

    【讨论】:

    • 一些解释会很好。
    • 我没有给你打分,但我认为这是因为这不允许你获取任何月份,只有上个月。我个人会使用你的答案。这是最简单的。我会支持你的:)
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多