MySQLの設定に2つのテーブルがあります。 1つは材料で、もう1つはそれぞれの重量である。いくつかのマテリアルが更新されるたびに、ウェイトテーブルの別の行を追加してウェイトを更新し、ウェイトの変更を追跡します(タイムスタンプやものも含まれますが、以下の例では追加しません。簡単にするために)MySQLがエントリごとに1行だけを返すようにする
Table "Weights" Table "Materials"
############################### ##############################
# ID # MaterialID # Weight # # Code # Type # Size # Color #
############################### ##############################
# 1 # 46 # 456.4 # # 46 # B # 13 # Black #
# 2 # 46 # 453.2 # # 47 # D # 11 # Green #
# 3 # 47 # 231.1 # ##############################
# 4 # 47 # 222.0 #
###############################
今、私は以下のようなクエリを実行した場合、私は材料を得ることができ、それが対応する重みです:。
SELECT Materials.Code,
Materials.Type,
Materials.Size,
Materials.Color,
Weights.Weight
FROM
Materials
INNER JOIN Weights ON Weights.MaterialID = Materials.Code
WHERE Materials.Code = 46
ORDER BY Weights.Code DESC
LIMIT 1
結果(これは、対応する材質に私の最後の重みを示して):
#######################################
# Code # Type # Size # Color # Weight #
# 46 # B # 13 # Black # 453.2 #
#######################################
これまでのところ、とても良いが、今...
私はLIMITと句を省略した場合、私は複数の行(それは非常に明白であるが、ここで私は今こだわっている)を取得:
を#######################################
# Code # Type # Size # Color # Weight #
# 47 # D # 11 # Green # 231.1 #
# 47 # D # 11 # Green # 222.0 #
# 46 # B # 13 # Black # 453.2 #
# 46 # B # 13 # Black # 456.4 #
#######################################
私の計画は、対応するマテリアルで最後に挿入したウェイトのみを取得することでした。一つの材料、1つの重量行については、そのよう:
#######################################
# Code # Type # Size # Color # Weight #
# 46 # B # 13 # Black # 453.2 #
# 47 # D # 11 # Green # 222.0 #
#######################################
私はすでに、それは一つだけを選ぶだろうが、それは唯一の46である1行を、戻ってくることを期待し、Weights.Weight
間MIN()
を入れてみました他のすべてを無視する。
私は無知で、インターネット上ですでに検索されていますが、答えが見つかっていますが、私のニーズに合わせてどのように対応できるかはわかりません。
ご協力いただきまして誠にありがとうございます。
を使用でき
LEFT JOINを使用してください。 – saband
@saband私はMySQLをよく理解していません(基本はそうですが、JOINとかそうではありません)。LEFT JOINを使って私を正しい方向に向けることができれば、非常に役に立ちます。 – Fusseldieb
この過去の投稿をチェックすると、https://stackoverflow.com/questions/3491329/group-by-with-maxdateは基本的に同じ概念です。 – Nic3500