0

これが私のテーブル構造とデータです

    idactor_idcreated_atupdated_at

    729 80 2012-09-10 17:05:59 2012-09-10 17:05:59
    731 80 2012-09-10 17:04:02 2012-09-10 17:04:02
    725139 2012-09-06 13:59:08 2012-09-06 13:59:08
    724 76 2012-09-06 11:31:30 2012-09-06 11:31:30
    723 29 2012-09-06 09:40:22 2012-09-06 09:40:22
    719 29 2012-09-06 09:24:02 2012-09-06 09:24:02
    811 80 2012-09-02 17:05:59 2012-09-10 17:05:59
    812 80 2012-09-01 17:04:02 2012-09-10 17:04:02

これはの結果です

SELECT  `te`.`id`, te.actor_id, te.created_at, te.created_at
FROM `timeline_events` AS te
ORDER BY 
    te.created_at DESC
    LIMIT 10

私はそれをactor_idとcreated_atでグループ化する必要があります

これが私が最後に必要なものです

    idactor_idcreated_atupdated_atカウント

    729 80 2012-09-10 17:05:59 2012-09-10 17:05:59 2
    725139 2012-09-06 13:59:08 2012-09-06 13:59:08 1
    724 76 2012-09-06 11:31:30 2012-09-06 11:31:30 1
    723 29 2012-09-06 09:40:22 2012-09-06 09:40:22 2
    812 80 2012-09-10 17:04:02 2012-09-10 17:04:02 2

誰かがこれを行う方法を教えてもらえますか?

よろしくお願いします

UPD簡単にするために、別の例を示します

だから私は次の行があると言います

1 1(カウント:2)
1
3 3(カウント:1)
4
4 =>魔法の機能の後は4になるはずです(カウント:2)
1
1 1(カウント:3)
1
6 6(カウント:2)
6
4 4(カウント3)
4
4

したがって、グループごとに分割する必要があります。

UPD2 タイムラインをレンダリングするためにこのクエリが必要です。現在、ユーザーが行ったことをすべて表示していますが、グループ化する必要があります。

  • user1アップロード写真
  • user1が情報を変更しました
  • user2更新されたバイオ
  • user3アップロードされた写真
  • user3更新されたバイオ
  • user1アップデートバイオ

  • user1が写真をアップロードし、infomarionを変更しました
  • user2更新されたバイオ
  • user3が写真をアップロードし、略歴を更新
  • user1更新されたバイオ
4

4 に答える 4

2

私はこれがあなたがやろうとしていることかもしれないと思います:

select t1.id,
  t1.actor_id,
  max(created_at) created_at,
  updated_at,
  t2.total
from yourtable t1
left join
(
  select count(*) total, date(created_at) dt, actor_id
  from yourtable
  group by actor_id, date(created_at)
) t2
  on t1.actor_id = t2.actor_id
  and date(t1.created_at) = t2.dt
group by  t1.actor_id, date(t1.created_at)
order by t1.created_at desc

デモ付きのSQLフィドルを参照してください

関数actor_idを使用して日付をグループ化していますDATE()

于 2012-09-17T14:55:42.327 に答える
1

私は自分で解決策を見つけます

これがクエリです

SET @i = 0;
選択する
    COUNT( `wrapper`.`id`)AS'count'、
    GROUP_CONCAT( `wrapper`.`type` SEPARATOR'、')as'types'
から (
    選択する  
        @prev:=(
            SELECT prev_te.actor_id
            FROM `timeline_events` AS prev_te
            WHERE prev_te.created_at> te.created_at
            prev_te.created_atASCによる注文
            制限1
        )AS'prev_actor_id'、
        もしも(
            @prev=te.`actor_id`または@prevISNULL、
            @私、
            @i:= @i + 1
        )AS'actor_id_group'、
        `te`。*
    FROM `timeline_events` AS te
    注文者
        te.created_at DESC、
        te.id DESC
)AS`ラッパー`
GROUP BY`wrapper`.`actor_id_group`
制限10

そしてここに証明リンクがあります;-)

このウェブサイトは本当に私を助けてくれました

mysqlは変数でグループ化されなかったため、グループ化の目的でラッパーを使用しています。誰かがより良い解決策を知っている場合は、私に知らせてください

于 2012-09-18T09:26:44.577 に答える
0

GROUP BY actor_idbeforeorder by句を追加します。

最新の編集: select distinct actor_id, count(actor_id), created_at from actors group by actor_id order by created_at desc;

于 2012-09-17T14:43:04.420 に答える
0

SELECT teid、te.actor_id、te.created_at、te.updated_at、COUNT(*)FROM timeline_eventsAS te GROUP BY te.actor_id、te.created_at ORDER BY te.created_at DESC LIMIT 10

于 2012-09-17T14:43:59.683 に答える