私はGROUP BY
句を持つクエリを持っています。このクエリでは、records
テーブルから従業員が「チェックイン」し、フィールドがの場合、従業員はオフィスにいますが、の場合、退職します。特定の列の最後の行の値(日付)を取得するためにGROUP BYを取得するにはどうすればよいですか?
GROUP BY
節にrecords.dn
と書いておきます。これは、従業員ごとに重複したエントリを作成することになります(名前をテーブル内で順番に2回取得します)。
私は選択でMINとMAXを使ってみましたが、それは全く意味がありませんでした。
従業員が複数回チェックイン/チェックアウトできるデータベースの複数の行から、LATEST行を取得してそのdn
フィールドを使用するにはどうすればよいですか?
select
MAX(records.dn),
`records`.`din`,
`users`.`username`,
`users`.`id` as `user_id`,
DATE(records.created_at) AS date,
TIME(MIN(records.created_at)) AS first_log,
TIME(MAX(records.created_at)) AS last_log
from `records`
inner join `users` on `records`.`din` = `users`.`din`
where records.created_at BETWEEN '2016-09-05 00:00:00'
AND '2016-09-08 00:00:00'
group by `users`.`username`, DATE(records.created_at)
order by `first_log` asc
(第1の選択列がMAXを使用して、私がしようとしたものです)
これは、いくつかのサンプルデータを持つレコードのテーブルです:
これは私が話しているクエリは次のとおりです。
どのように私は私が探しているものを達成できますか?
私は昨日この状況にいました。私が見つけた最良の解決策はここにありますhttp://stackoverflow.com/questions/1313120/retrieving-the-last-record-in-each-group/1313293#1313293 –
あなたの期待される結果は? sqlfiddleは誰の心を壊すことはありません:p – Drew
http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be- a-very-simple-sql-query – Strawberry