按月统计时间戳中的不同日期sql

fdbelqdn  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(375)

我想计算每个月不同日期的数量。
我的数据集如下所示:

TIMESTAMP 
------------------
2017-10-25 14:39:51 
2017-10-25 15:00:51
2017-11-10 02:39:42
2018-09-24 14:39:55
2018-09-25 13:25:01
2019-02-12 12:23:44
...

所以我的预期结果是:

year_month | count
2017-10    2
2018-09    2
2019-02    1

到目前为止,我尝试了以下代码,但返回的结果不正确:

WITH F AS(
    SELECT concat(YEAR(TIMESTAMP), MONTH(TIMESTAMP)) AS year_month
        FROM tbl
        WHERE TYPE = 'Site'
            AND TO_SITE = 'location'
)

SELECT count(year_month), year_month
    FROM F
    GROUP BY year_month

我不需要担心一天的时间。我只想计算每个月的不同天数。事先谢谢你的帮助。

x33g5p2x

x33g5p2x1#

在sql server中,我推荐以下方法之一:

select year(timestamp), month(timestamp), count(distinct convert(date, timestamp)
from t
group by year(timestamp), month(timestamp);

或:

select format(timestamp, 'yyyy-MM'), count(distinct convert(date, timestamp))
from t
group by format(timestamp, 'yyyy-MM');

我认为不需要子查询或CTE。

o2g1uqev

o2g1uqev2#

从您的代码中,我假设您使用的是sql server,那么您就可以这样做了

with cte as
(
  select
    left(convert(varchar, myCol,112),6) as yyyy_mm,
    convert(date, myCol) as date
  from myTable
)

select 
  yyyy_mm,
  count(distinct date) as count
from cte
group by
  yyyy_mm

输出:

| yyyy_mm | count |

* -----------------*

| 201710  | 1     |
| 201711  | 1     |
| 201809  | 2     |
| 201902  | 1     |
oknrviil

oknrviil3#

使用 date_trunc() 在postgresql中,它可以是:

SELECT date_trunc('month', timestamp)
     , count(DISTINCT date_trunc('day', timestamp))
FROM   tbl
GROUP  BY 1;

根据设置的详细信息,可以进行各种性能优化。

相关问题