【问题标题】:Group by date in column which stores timestamp in long(bigint)按日期分组,在 long(bigint) 中存储时间戳
【发布时间】:2011-11-03 09:18:14
【问题描述】:

我想每天从表中获取计数,但时间列很长,所以我不能简单地按时间列分组。我必须在时间列中按日期分组。我该怎么做?

表:

Column   |  type
----------------
id       |  Long (bigint)
name     |  String (varchar)
time     |  Long  (bigint)

我尝试了以下查询,但它不起作用,因为我有很长的时间,我想按日期分组。

select time,count(*) from my_table mt group by time;

如何在上述查询中按日期分组?

我要在hibernate中使用这个查询,所以需要一个也可以用hql编写的查询。

【问题讨论】:

    标签: mysql hibernate datetime group-by timestamp


    【解决方案1】:

    首先,我们将时间戳转换为日期,然后按日期分组!

    select mt.time,count(*) from my_table mt group by DATE( FROM_UNIXTIME( mt.time ));
    

    希望这会奏效。加油:)

    【讨论】:

    • 你需要反引号而不是单引号(或根本没有刻度)。
    • 你知道如何在 postgresql 中做同样的事情吗?
    • @Harry 请使用 "::date" 除了 from_unixtime 和 date 函数,所以它会变成 (mt.time::date) P.S:抱歉目前我还没有安装 postgresql 请验证一次并如有任何疑问,请告诉我:)
    • @Arians:我试过这个:select time::date from my_table; 它返回ERROR: cannot cast type bigint to date
    • @Harry:请您说明您使用的是哪个版本?
    【解决方案2】:
    SELECT DATE(FROM_UNIXTIME(`time`)) AS date_from_time, COUNT(1)
    FROM my_table
    GROUP BY date_from_time
    

    【讨论】:

    • 它不工作。我得到的结果是null | 588。 588 是表的总行数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多