【问题标题】:SQLite group by a non-calendar month (from 10th in one month to 10th in next month)SQLite 按非日历月分组(从一个月的 10 号到下个月的 10 号)
【发布时间】:2012-08-08 02:15:37
【问题描述】:

我是一名 Android 程序员,我在我的应用程序中使用 SQLite(没有太多选择 :))。 我有一个表,其中包含一个 unix 时间戳字段。现在,如果我想对这个表中的某个字段求和,并按月份分组,我只是这样做:

选择月、年、总和(x) 来自 foo 按月、年分组

(当然月份和年份是日期函数)。

但我想按非日历月对它进行分组,例如从一个月的 10 号到他之后的 10 号。

我对 SQL 有非常基本的了解,所以我不知道如何去做。 有人告诉我我需要使用 PARTITION BY 但 SQLite 不支持它。 我很确定有办法做到这一点。

提前致谢, 埃拉德

【问题讨论】:

    标签: android database sqlite group-by


    【解决方案1】:

    要处理月份的 10 号,您只需从日期中减去 10 天即可:

    select strftime("%y %m", tendaysbefore), <whatever>
    from (select foo.*,
                 date(thedate, '-10 days') as tendaysbefore
          from foo
         ) t
    group by strftime("%Y-%m", tendaysbefore)
    order by 1, 2
    

    您可以将年份和月份放在不同的列中。此示例将它们放在一列中。

    【讨论】:

    • 我需要从当月减去这十天,然后将它们添加到上个月,我该怎么做?
    • 我不明白。你有一个报告日期。如果您在该日期按月报告,您将获得该月的天数。如果减去 10 天,则前十天将出现在上个月。这适用于您使用的任何月份,无论是当前日期还是其他日期。
    • 对不起,我没听懂你的意思,我想我明白了,如果没有,请纠正我。您首先进行查询并在 10 天前获取表中的所有日期,所以现在当您进行查询时,它将是“常规”查询,只是按月和年分组。因此,例如,如果我想从 20 日到 20 日分组,它将是date(thedate, '-20 days')。对吗?
    • 是的,没错。如果您希望当前月份为 10 日(因此 5 月 11 日至 6 月 10 日变为 6 月而不是 5 月),那么您将在日期上增加一个月。
    • 如此简单但非常聪明的解决方案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多