在MySQL中从DateTime计算不同日期

5

我有一个数据库表记录了请求,其中包含IP列和DateTime时间戳。我想以一种方式获取这些数据,使我能够计算某个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();

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

2个回答

13
如果字段 created_atTIMESTAMP
COUNT(DISTINCT FROM_UNIXTIME(created_at, '%Y-%m-%d')) as days

或者如果字段是 DATETIME 类型:

COUNT(DISTINCT DATE(created_at)) as days

1
或者我认为可以使用COUNT(DISTINCT TO_DAYS(created_at)) as days - Matteus Hemström
@Fnatte: TO_DAY() 接受日期作为参数,而不是时间戳。 - Glavić
1
@Fnatte:我不确定我会使用这个函数,因为第一个例子是SELECT TO_DAYS(950501);看起来像是一个时间戳,但它实际上是代表日期1995-05-01TO_DAYS() 函数只能处理从 0000-01-01 开始的日期。 - Glavić

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接