2016-07-04 14 views
0

Datetimeの最初のテーブルのエントリをUser_IDごとに取得して、lastnameUser_IDを他のテーブルに依頼します。シンプルな...INNERでMySQLクエリ、JOIN、GROUP BYとマックス

は、私が(最も有望のように見えるがnontheless偽のwhick)このようにそれを試してみました:

SELECT w.Datetime, w.User_ID, w.Status, e.Lastname 
FROM worktimes AS w 
INNER JOIN employees AS e 
ON w.User_ID=e.ID 
RIGHT JOIN (SELECT max(Datetime) AS Datetime, User_ID 
    FROM worktimes 
    WHERE Datetime>1467583200 AND Location='16' 
    GROUP BY User_ID 
    ORDER BY Datetime DESC 
) AS v 
ON v.User_ID=w.User_ID 
GROUP BY w.User_ID 
ORDER BY e.Nachname; 

は、誰かが私にヒントを与えるしてくださいもらえますか? ...私は本当に今、しばらくの間、この時にこだわって、今私は私の脳内にいくつかの結び目を取得するために始める:(

+0

いくつかのデータで少しsqlfiddleを作成するとどうですか?期待するものを表形式で表示します。誰かがそれを打ち明ける。 – Drew

+0

今日のヒント:右結合から左結合への切り替え! (人々は通常、左と十分な問題は参加しており、右の参加これはオプションのデータは、右のメインテーブルに参加するよりも、メインテーブルには、オプションのデータを結合左考えるのは簡単だ...仕方さらに混乱である。) – jarlh

+0

参照、これらの他の人は、あまり賢くありより多くの識字者。 – Drew

答えて

2

あなたが実際には、非常に接近している:

SELECT w.Datetime, w.User_ID, w.Status, e.Lastname 
FROM worktimes w INNER JOIN 
    employees e 
    ON w.User_ID = e.ID LEFT JOIN 
    (SELECT max(Datetime) AS Datetime, User_ID 
     FROM worktimes 
     WHERE Datetime > 1467583200 AND Location = '16' 
     GROUP BY User_ID 
    ) ww 
    ON ww.User_ID = w.User_ID AND w.DateTime = ww.DateTime 
ORDER BY e.Nachname; 

注:

  • あなたは、私がLEFT JOINとそれを置き換える。RIGHT JOINは不要である。DateTime値に参加するよう
  • が必要なのですが、私はそれはあなたがどちらか欲しいものであるかわからない。あなたはどうかを確認するためにINNER JOINで開始される可能性がありますthあなたが望むものを生み出す。
  • ほとんどの状況でサブクエリにORDER BYを使用しないでください。
  • あなたがcorrelated subqueriesとして知られてについて尋ねているか外側のクエリ
+0

左の表が大きすぎて左の結合を使用できないため、右の結合が必要です。しかし、右のジョインではうまくいくようです...もう少しテストしますが、今までありがとうございます。あなたは大きな助けになります。 –

1

GROUP BYは必要ありません。標準SQLでは、APPLYLATERAL構成を使用して実装できます。残念ながら、すべてのRDBMSがこれらの優雅なソリューションをサポートするわけではありません。たとえば、MSSQL、最近のバージョンのOracleおよびPostgresqlにはこれらの構文がありますが、,はありません。 IMHO、MySQLユーザにとっては本当に苦しいです。近年、MySQLは標準に向かって傾き始めましたが、何らかの奇妙な方法で - 標準で非標準のハックをオフにしますが、標準的なものは実装していません。たとえば、サブクエリでのソートがサポートされていないので、あなたの質問に提示された独自のクエリはデフォルトでは動作しません。サブクエリにはLIMIT some_really_big_numberを追加してください。

+0

ところで、ソートがサブクエリでは機能しない理由は、理論的にはソートされたテーブルが「セット」ではなく「カーソル」であるためです。間違っていると、賢明な専門家が私を訂正してくれることを願っています。 – Jacobian