【问题标题】:Counting distinct days from DateTime in MySQL从 MySQL 中的 DateTime 计算不同的天数
【发布时间】:2013-10-06 01:47:46
【问题描述】:

我有一个记录请求的数据库表,其中包含一个 IP 列和一个日期时间戳。我试图以一种让我计算某个 IP 发出请求的天数的方式获取这些数据。我正在使用 Laravel 的查询生成器。

到目前为止,这就是我所拥有的:

$data = DB::table('requests')
                    ->groupBy('ip')
                    ->select('ip', 
                             DB::raw('COUNT(DISTINCT created_at) as days'), 
                             DB::raw('COUNT(*) as requests'))
                    ->orderBy('days', 'desc')
                    ->take(50)
                    ->get();

我的问题是时间戳还包含小时、分钟和秒。因此,“天”计数将与总请求数大致相同。我只想计算活跃的天数。

【问题讨论】:

    标签: php mysql sql laravel laravel-4


    【解决方案1】:

    如果字段created_atTIMESTAMP

    COUNT(DISTINCT FROM_UNIXTIME(created_at, '%Y-%m-%d')) as days
    

    或者如果字段是DATETIME

    COUNT(DISTINCT DATE(created_at)) as days
    

    【讨论】:

    • COUNT(DISTINCT TO_DAYS(created_at)) as days 我想。
    • @Fnatte: TO_DAY() 接受日期作为参数而不是时间戳。
    • @Fnatte:我不确定我会使用这个函数,因为第一个例子是SELECT TO_DAYS(950501); 看起来像时间戳,但它是1995-05-01 的缩写。 TO_DAYS() 适用于从 0000-01-01 开始的日期。
    【解决方案2】:

    您或许可以使用 DATE_FORMAT 来做您想做的事。 看看这个问题: Selecting a distinct date by day only from datetime (YYYY-MM-DD HH:MM:SS) in MySQL

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 2014-08-10
      • 2019-06-11
      • 2019-11-02
      相关资源
      最近更新 更多