2017-09-19 5 views
0

名前、都市、LastUpdatedのようなデータを持つテーブルがあります。私はテーブルからすべてのデータを名前で区別したいが、最後に更新されたものは最新のものだけを記録したい。
2つのレコードの
ビル、LA、2017年9月11日
ビル、NYがある場合は、クエリ上記で2017年9月19日
はビル、NY、2017年9月19日のレコードを返す必要があります。このようにして、名前が異なるが最後に更新されたすべてのレコードを最新のものにしたい(降順)。

ジョブを実行するSQLクエリは何ですか?MySQL - すべての列を選択する最後の日付で1列がDISTINCTである

+1

は、あなたがこれまでに試してみましたか? – bbrumm

+0

これを送信する前にStack Overflowを検索して、既存のソリューションが見つかるかどうかを確認しましたか? –

+0

スタックオーバーフローを検索しましたが、必要な答えが見つかりませんでした。 – Greatchap

答えて

3

これは主に、他の回答/コメントが必要なものから外れているように見えるためです。あなたが取得したいすべてがそれぞれの名前に関連付けられている最新の更新した場合は、次のような単純なGROUP BYのクエリを使用できます。

SELECT Name, MAX(LastUpdated) 
FROM yourTable 
GROUP BY Name 

をしかし、あなたは、それぞれの名前を完全に最新のレコード(つまり、すべての列)を取得したい場合は、 GROUP BYNameまたは他の列を集計で選択することしかできません(他の列がNameで一意に決定できる場合は完全に真ではありませんが、一般的には真です)。正式な方法は、元のテーブルを上記のサブクエリに結合し、各名前の最新のものを除いてすべての行をフィルタで取り除くことです。

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT Name, MAX(LastUpdated) AS max_last_updated 
    FROM yourTable 
    GROUP BY Name 
) t2 
    ON t1.Name = t2.Name AND 
     t1.LastUpdated = t2.max_last_updated 
1
SELECT t1.* 
FROM Tablename AS t1 
(
    SELECT name, MAX(LastUpdated) AS LastUpdated 
    FROM Tablename 
    GROUP BY name 
) AS t2 INNER JOIN t1.name = t2.name 
       AND t1.LastUpdated = t2.LastUpdated 
2

これは、2つのステップで解決することができます。

  1. last_updated_date
  2. で行を探すには、その行のすべてのデータを表示します。

クエリは次のようになります。

SELECT 
t.name, 
t.city, 
t.last_updated 
FROM yourtable t 
WHERE t.last_updated = (
    SELECT MAX(s.last_updated) 
    FROM yourtable s 
    WHERE s.name = t.name 
); 
+0

ありがとうございます。しかし、私はSELECT t.name、t.city、t.last_updatedをt *に置き換えることができます。 – Greatchap

+0

はい、可能ですが、tよりもむしろ列名を指定する方が良い方法です。* – bbrumm

+0

where節を追加する場合は、名前や列に基づいて検索し、最新のレコードを取得したらどうすればよいですか? – Greatchap

関連する問題