3

過去7日間のユーザーのアクティビティを取得したいと思います。私が照会しているテーブルは、ユーザー、イベント、および日付をリンクする多対多です。

今日が5月7日で、ユーザーが5月4日と2日のアクティビティのみを記録している場合、アクティビティが記録されていない日付に対応するNULLを返すクエリを作成できますか?

ソース

May 2     42
May 4     88

必要な出力

May 1     NULL
May 2     42
May 3     NULL
May 4     88
May 5     NULL
May 6     NULL
May 7     NULL

これはMySQLでどのように行うことができますか?

4

1 に答える 1

0
SELECT DISTINCT users, events, dates
FROM table
WHERE dates between date_format(date1, '%Y-%m-%d')
and date_format(date2, '%Y-%m-%d')    or NOW() or CURDATE()....
and user = 'username'

これはかなり一般的ですが、名前と日付を置き換えると (おそらく目的のためにフォーマットする必要はありません)、null プレースホルダーに関係なくすべての結果が返されます。

date_reference_table にデータを入力できます...これのストアド プロシージャは次のとおりです。

年と月のみを認識するために日付形式を使用していますが、これは変更できます...

その場合、内部結合も必要になります...したがって、date_referenceテーブルで内部結合を実行すると、上記のコメントで述べたように結果が吐き出されます。

区切り記号 $$

CREATE PROCEDURE `generate_date_reference_table`(d1 date, d2 date)
BEGIN
declare d datetime;

create table BLMBP.date_reference (d char(7) not null);

set d = d1;
while d <= d2 do
    insert into BLMBP.date_reference (d) values (date_format(d, '%Y-%m'));
    set d = date_add(d, interval 1 month);
end while;

END$$
于 2012-05-29T18:27:57.607 に答える