0

私はmysql5.1を使用しています。

これは私のDBスキーマです:

id     user_id     type     created_at
1       32          X       2012-11-19
2       32          Y       2012-11-18
3       30          X       2012-11-16
4       32          Z       2012-11-17
5       31          Y       2012-11-13
6       32          Z       2012-11-9

SQL クエリが、各タイプのuser_idtype、および最新 のものを返すようにしたいと考えています。created_atこのリクエストをしようとしまし SELECT max(type) FROM notification WHERE user_id=34 ORDER BY typeたが、最新のcreated_at.

4

5 に答える 5

1
select n.id, n.user_id, n.type, m.max_created_at
from notification n
     inner join
     (
         select   type, max(created_at) as max_created_at
         from     notification
         group by type
     ) m  on n.type = m.type and 
             m.max_created_at = n.created_at

これは、同じタイプでcreated_atの日付のレコードが2つないことを前提としていることに注意してください。

于 2012-11-20T09:26:02.920 に答える
1

GROUP BY(クエリで欠落している)複数の行から混合された値が返されないことを保証しないため、非常に単純なクエリではこれを行うことはできません。

SELECT * FROM notifications AS t1
INNER JOIN (
    SELECT type, MAX(`created_at`) AS max_created_at
    FROM notification
    WHERE user_id=34
    GROUP BY `type`
) AS t2
    ON t1.type = t2.type
        AND t1.created_at = t2.max_created_at
于 2012-11-20T09:26:53.183 に答える
0

created_at次のクエリは、タイプごとに最高のものを選択します。

SELECT type, MAX(created_at) FROM notification GROUP BY type ORDER BY type

それをユーザーとどのように組み合わせるかわからないので、質問は十分に正確ではありません。

created_at次のクエリは、特定のユーザーのタイプごとに最高のものを選択します。

SELECT user, type, MAX(created_at) 
  FROM notification 
 WHERE user = 34
 GROUP BY type, user 
 ORDER BY type, user
于 2012-11-20T09:24:14.513 に答える
0
SELECT user_id, type, max(created_at) FROM notification WHERE user_id=34 GROUP BY user_id,type ORDER BY type
于 2012-11-20T09:25:17.163 に答える
0
SELECT max(type) FROM notification WHERE user_id=34 ORDER BY type

このように修正してみてください

SELECT user_id, type,created_at FROM notification WHERE user_id=34 ORDER BY type

次に、最新のものから古いものへ、または古いものから最後のものへと見たい場合

追加ASCまたはDESC注文

于 2012-11-20T09:25:18.413 に答える