これはテーブル構造です
CREATE TABLE `reports` (
`report_id` int(11) NOT NULL auto_increment,
`computer_id` int(11) NOT NULL default '0',
`date_entered` datetime NOT NULL default '1970-01-01 00:00:00',
`total_seconds` int(11) NOT NULL default '0',
`iphone_id` int(11) default '0',
PRIMARY KEY (`report_id`),
KEY `computer_id` (`computer_id`),
KEY `iphone_id` (`iphone_id`)
) ENGINE=MyISAM AUTO_INCREMENT=120990 DEFAULT CHARSET=latin1
最後に入力されたreport_id
からcomputer_id
ごとにdate_entered
をリストするSELECT
ステートメントが必要であり、その方法はわかりません。誰かが私を正しい方向に向けることができますか?事前に。
これはそれを行う必要があります:
SELECT report_id, computer_id, date_entered
FROM reports AS a
WHERE date_entered = (
SELECT MAX(date_entered)
FROM reports AS b
WHERE a.report_id = b.report_id
AND a.computer_id = b.computer_id
)
最後のdate_enteredを表示するだけですか、それともlast_dateを入力して注文するのですか?
SELECT report_id, computer_id, date_entered
FROM reports
GROUP BY computer_id
ORDER BY date_entered DESC
-- LIMIT 1 -- uncomment to only show the last date.
これに応じて: https://bugs.mysql.com/bug.php?id=54784 charをキャストすることでトリックが行われるはずです:
SELECT report_id, computer_id, MAX(CAST(date_entered AS CHAR))
FROM reports
GROUP BY report_id, computer_id
回避策だが機能するソリューション
IDが自動インクリメントの場合のみ、最大日付の代わりに最大IDを検索できます。したがって、IDによって、他のすべてのフィールドを見つけることができます。
select *
from table
where id IN (
select max(id)
from table
group by #MY_FIELD#
)
私はこのソリューションを使用し、非常にうまく機能します
SELECT report_id、computer_id、date_entered FROM FROM GROUP BY computer_id having max(date_entered)
私にぴったりの作品:
(SELECT content FROM tblopportunitycomments WHERE opportunityid = 1 ORDER BY dateadded DESC LIMIT 1);
これは非常に古い質問ですが、同じ問題のためにここに来たので、他の人を助けるためにここに残しています。
データ量が原因でDBのクエリに5分以上かかっていたため、クエリを最適化しようとしました。私のクエリは、受け入れられた回答のクエリに似ていました。 パブロのコメント 正しい方向に私を押して、私の5分間のクエリは0.016秒になりました。クエリ時間が非常に長い他のユーザーを支援するには、 norrelated subquery を使用してみてください。
OPの例は次のとおりです。
SELECT
a.report_id,
a.computer_id,
a.date_entered
FROM reports AS a
JOIN (
SELECT report_id, computer_id, MAX(date_entered) as max_date_entered
FROM reports
GROUP BY report_id, computer_id
) as b
WHERE a.report_id = b.report_id
AND a.computer_id = b.computer_id
AND a.date_entered = b.max_date_entered
コメントをありがとう Pablo あなたは私に大きな時間を節約しました!