1

机がある:


+---------+--------+---------------------+----------+
| user_id | marker | date                | trans_id |
+---------+--------+---------------------+----------+
|       6 | M      | 2013-08-27 11:45:24 |        5 |
|       6 | MA     | 2013-08-27 11:45:42 |        6 |
|       6 | A      | 2013-08-27 11:45:59 |        7 |
+---------+--------+---------------------+----------+
query: をテストしまし
SELECT marker , MAX(date) AS maxdate FROM mytable WHERE user_id =6
たが、適切ではありません。どのようにクエリを書きますか? 前もって感謝します。

4

6 に答える 6

5

これにより、すべての最新のレコードが得られますuser_id

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  user_id , MAX(date) date
            FROM    tableName
            GROUP   BY user_ID
        ) b ON a.user_id = b.user_id AND
                a.date = b.date
-- WHERE    a.user_id = 6         ==> if you want for specific user_id only
于 2013-08-27T08:07:35.287 に答える
2

これにより、すべての最新のレコードが得られますuser_id

SELECT
  a.user_id,
  b.marker,
  MAX(a.date) AS maxdate,
  b.trans_id
FROM TableName a
JOIN TableName b
  ON b.date = a.date AND a.user_id = b.user_id
GROUP BY a.user_id
ORDER BY a.date DESC;

MAX()SUM()はや と同様に集約関数COUNT()です。これらの機能は と組み合わせて使用​​する必要がありますGROUP BY

于 2013-08-27T08:09:26.943 に答える
1

それはあなたが望むものに依存します。テーブルに最近の行が必要な場合、クエリは次のとおりです。

SELECT *  
FROM mytable 
WHERE (user_id =6 AND date =(SELECT MAX(date) FROM mytable));

ユーザー リストを最新のものから古いものへと並べ替えたい場合、クエリは次のようになります。

SELECT * 
FROM mytable 
WHERE (user_id =6)
ORDER BY date DESC;

ユーザー リストを最も古いものから新しいものへと並べ替えたい場合、クエリは次のようになります。

SELECT * 
FROM mytable 
WHERE (user_id =6)
ORDER BY date ASC;
于 2013-08-27T08:27:27.523 に答える
0

私の好みは、サブクエリに参加することです(これは、すべてのエントリが必要な場合です)

SELECT 
    marker, user_id, maxDate.date AS maxdate
FROM
    mytable as t1 join
    (select max(date) as date
    from mytable as t2
    where t2.user_id = 6
    group by user_id) as maxDate
WHERE
    user_id = 6
于 2013-08-27T08:12:39.233 に答える