我有一个包含以下列的表:
NETID是用户的唯一标识符,OCCURRENCES是他们在一个月内登录的次数,而EARLIEST_MONTHLY_DATE是他们登录一个月的最早时间。我目前正在使用:
SELECT
to_char(earliest_monthly_date, 'yyyy-mm-dd') MARCH,
COUNT(NETID) unique_login_count
FROM
REPORT_SERVICE_USAGE
WHERE
earliest_monthly_date >= to_date('2014-03-01', 'yyyy-mm-dd')
AND earliest_monthly_date <= to_date('2014-03-31', 'yyyy-mm-dd')
GROUP BY
to_char(earliest_monthly_date, 'yyyy-mm-dd')
ORDER BY
to_char(earliest_monthly_date, 'yyyy-mm-dd') ASC
它给出了给定月份每天登录的总数。它返回如下内容:
现在,我想设置我的查询,以便按月分组登录计数,而不是按给定月份的日期分组。我不知道如何做到这一点(或者如果可以做到的话),因为我对SQL不是很熟悉,但是我们将非常感谢任何帮助。如果您需要更多信息,请随时提出。顺便说一句,它是一个Oracle数据库。
答案 0 :(得分:2)
SELECT
to_char(earliest_monthly_date, 'yyyy-mm') MARCH,
COUNT(NETID) unique_login_count
FROM
REPORT_SERVICE_USAGE
WHERE
earliest_monthly_date >= to_date('2014-03-01', 'yyyy-mm-dd')
AND earliest_monthly_date <= to_date('2014-03-31', 'yyyy-mm-dd')
GROUP BY
to_char(earliest_monthly_date, 'yyyy-mm')
ORDER BY
to_char(earliest_monthly_date, 'yyyy-mm') ASC
答案 1 :(得分:1)
只需将'to_char'更改为select和group即可提取
SELECT
extract(MONTH from earliest_monthly_date) MARCH,
COUNT(NETID) unique_login_count
FROM
REPORT_SERVICE_USAGE
WHERE
earliest_monthly_date >= to_date('2014-03-01', 'yyyy-mm-dd')
AND earliest_monthly_date <= to_date('2014-03-31', 'yyyy-mm-dd')
GROUP BY
extract(MONTH from earliest_monthly_date)
ORDER BY
extract(MONTH from earliest_monthly_date) ASC
修改强>
如果您喜欢按月份和年份分组,那么来自@Lamak的答案是更好的选择。