0

現在の日付から7日前までの特定の日に登録されたユーザーの数をクエリで返すようにします。日の代わりに、日時形式で整数形式で表示されます。たとえば、2012年12月20日の日付では、0として表示され、2012年12月21日は1として表示されます。

私の質問:

select date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()  as date, count(*) users 
from registered 
group by date(update_timestamp)

必要な出力

DATE       | USERS
20/12/2012 | 5
21/12/2012 | 6

私が得ている出力

DATE  | USERS
    0 | 5
    1 | 6

私のSQLクエリの何が問題になっていますか?また、過去7日間のデータを取得する別の方法を知る必要があります

4

3 に答える 3

2

WHERE句が必要だと思います:

select date(update_timestamp) Date, count(*) users 
from registered 
where date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()
group by date(update_timestamp)
于 2012-12-10T12:57:41.550 に答える
2

ステートメントに条件を入れたselectので、結果を制限するのではなく、評価されて返されます。条件をwhereステートメントに入れます。

select date(update_timestamp) as date, count(*) users
from registered
where date(update_timestamp) between date_sub(sysdate(), interval 7 day) and sysdate()
group by date(update_timestamp)

ユーザーがいない場合でも間隔内のすべての日付を取得するには、別のデータ ソースに参加する必要があります。

select date_sub(sysdate(), interval d.offset day) date, count(r.update_timestamp) users
from registered r
inner join (
  select 0 as offset union all
  select 1 union all
  select 2 union all
  select 3 union all
  select 4 union all
  select 5 union all
  select 6 union all
  select 7
) d on date(r.update_timestamp) = date_sub(sysdate(), interval d.offset day)
group by date_sub(sysdate(), interval d.offset day)
于 2012-12-10T12:58:17.010 に答える
1

このクエリを試してください::

where句はフィルタリング部分です。日付タイプのロジックの場合、クエリのその部分で現在の日 - 7日間のロジックを使用する必要があります。

select date(update_timestamp) ,count(*) users 
from registered 
where date(update_timestamp) 
between 
date_sub(sysdate(), interval 7 day) and sysdate()  
group by date(update_timestamp)
于 2012-12-10T12:59:34.253 に答える