0

これを想像してみてください...ある人がコンピュータに関するデータの行をmysqlに追加し、日付が異なることを除いて、基本的に同じデータの行の別の行を再度追加します。ただし、各日付には常に挿入がスタンプされます。

重複を排除して、最新の行のみを表示できるようにしたい。

ID、COMPUTER、DATEADDの3つのフィールドを持つ「コンピューター」テーブルがあるとします。

テーブルの中はこんな感じ

1, dell, 2010-10-09
2, dell, 2011-10-10
3, gateway, 2010-03-03
4, dell, 2010-02-02

簡単です、わかりました...デルの重複を取り除き、最新の日付でのみデルを取得するにはどうすればよいですか?

私はこのクエリを試しました:

 SELECT * 
  FROM  `computers` 
  GROUP BY computer
  ORDER BY dates ASC 

期待どおりに機能しません。日付は最新ではありません。

4

2 に答える 2

0

コメントごとに改訂

SELECT * FROM
computers
INNER JOIN
(SELECT computer, MAX(dates) as dates
FROM computers
GROUP BY computer) AS max_dates ON computers.computer = max_dates.computer AND computers.dates = max_dates.dates

または、テーブル構造を変更してコンピュータフィールドに一意のインデックスを付けREPLACE INTO、エントリの履歴を気にしない場合は、すべてのデータをクエリとして挿入するだけで、重複が発生しないようにすることもできます。

于 2012-11-07T23:30:56.270 に答える
0

DESCの代わりに使用ASC

SELECT * 
FROM  `computers` 
GROUP BY computer
ORDER BY dateadd DESC;

更新1

別のショット:

SELECT *
  FROM computers c
 WHERE dateadd = (SELECT MAX(dateadd) 
                    FROM computers 
                   WHERE computer = c.computer)

ただし、同じコンピュータのエントリが1つの日付に複数ある場合は、問題が発生する可能性があります。

于 2012-11-08T01:12:36.197 に答える