0

1日に複数投稿しているユーザーのUSER_IDを全て取得したいのですが、

私はもともとこれを試してみました

    SELECT USER_ID, count(DISTINCT cast(POSTING_DATE as DATE))
    AS NUM_DAYS_OF_DUPLICATES FROM POSTING_TABLE
    WHERE USER_ID IN
        (SELECT USER_ID FROM POSTING_TABLE
        GROUP BY CAST(POSTING_DATE AS DATE) HAVING count(*) >= 2)
    GROUP BY USER_ID ORDER BY NUM_DAYS_OF_DUPLICATES DESC;

次に、これは特定の USER_ID に対して機能します

    SELECT USER_ID FROM POSTING_TABLE WHERE USER_ID = 30 
    GROUP BY cast(POSTING_DATE AS DATE) 
    HAVING count(cast(POSTING_DATE AS DATE)) > 1

上記で正しい結果が得られますが、USER_ID を指定せずにテーブル全体に対してクエリを実行すると、結果は得られません。

例えば。、

テーブル構造 USER_ID、POSTING_DATE ...

    USER_ID POSTING_DATE
    1       10-10-13
    1       10-10-13
    1       10-12-13
    1       10-12-13
    2       10-10-13
    2       10-10-13
    3       10-10-13
    4       10-12-13

結果が私に与える場所

    USER_ID  NUM_DAYS_WITH_MORE_THAN_ONE_POSTING
    1        2
    2        1
    3        0
    4        0

また、0を省略できる場合

4

1 に答える 1

1

これが解決策です

select x.user_id, count(x.num_days)
from
(
select USER_ID, COUNT(USER_ID) AS NUM_DAYS
from data1 
group by user_id, posting_date
having count(user_id) > 1
) x
group by 1

ワーキング SQL フィドル

(簡単にするために日付に varchar を使用しましたが、それでも問題なく動作するはずdateです。独自のデータベースで確認できます)

于 2013-07-09T18:54:56.750 に答える