2017-06-14 11 views
1

すべての項目について最後のレポートのみを取得したいのですが、の最新のレポートがそれぞれitem_idです。ここ は私の現在のソリューションです:SQL結果で最も古いエントリを削除するにはどうすればよいですか?

SELECT distinct * FROM t.reports ORDER BY created DESC LIMIT 100 

私のテーブルには、次の列で構成されています

id | user | item_id | created 
'2', '1', '2643', '2017-06-13 16:28:34' 
'3', '1', '19333', '2017-06-13 19:26:56' 
'4', '1', '19333', '2017-06-13 19:29:24' 
'5', '1', '1319', '2017-06-13 19:29:56' 
'6', '1', '1319', '2017-06-13 19:30:16' 
'7', '1', '1319', '2017-06-13 19:30:17' 
'8', '1', '1319', '2017-06-13 19:30:18' 
'9', '1', '1319', '2017-06-13 19:30:25' 
'10','1', '1319', '2017-06-13 19:31:51' 

私は重複item_idsだけそのアイテムの最新のエントリを望んでいません。 しかし、私はまた、すべてのレポートが欲しいですが、重複した項目レポートはありません!

例: 私は私のクエリを実行すると、私は行2,4と10が返されることを期待しています。

+0

'* DISTINCT'私はあなたが私たちに何をしたいのより具体的な説明を与えるために必要だと思う – Strawberry

+2

oxymoronicです。たぶんいくつかの例があります – RiggsFolly

+0

更新されたqを確認してください。 –

答えて

2

これを試してみてください:

select a.id,a.user,a.item_id,a.created 
from reports as a 
where a.created=(select max(created) 
       from reports as b 
       where a.item_id=b.item_id) 
+0

ありがとう!これは私が欲しかったのとまったく同じでした:) –

+0

私はそれをよく理解するようにSQLを説明してもらえますか? –

+0

@Oliver Hoff、最新のレポートが必要なので、最初に行うことは、サブクエリの中で行うことであるitem_idごとに最高の日付(作成された)を探していることです。最大日付を知ったら、その日付に対応するレポートを選択するだけです – nacho

0

次の方法でグループを使用することができます。

SELECT DISTINCT item_id, MAX(created), id, user 
FROM `t.reports` 
GROUP BY item_id 
ORDER BY MAX(created) DESC 
+0

これはうまくいかず、同じitem_idを持つデータベースから最初の日付を返します。最新の日付が見つからない –

0

私は私のテストデータベース上でそれをテストしてきたこれで試してみてください。

SELECT * 
FROM t.reports 
where item_id in (
        select distinct item_id 
        from t.reports 
       ) 
ORDER BY updated DESC 
LIMIT 100 
+0

GROUP BYが無効です。https://www.psce.com/blog/2012/05/15/mysql-間違って - あなた - 使用する - グループごとに正しく/ –

0

はこれが、この作品なら、私に知らせてみてください。

SELECT * FROM t.reports WHERE created IN (SELECT max(created) FROM t.reports) 
GROUP BY item_id 
LIMIT 100 
関連する問題