2016-03-28 18 views
0

選択した日付と選択したカテゴリを使用して、テーブルからデータを取得するクエリを作成する必要があります。私はクエリを書いたが、期待どおりに正しいデータを与えていない。 action列の値が'AD'の場合は、最大値がactiondateの行のみを照会する必要があります。最大値と特定の値を持つMySQLの行

INSERT INTO goldstockvaluation SELECT sh.stockid, sh.description, sh.branch, sh.grossweight, sh.pureweight, sh.purity, sh.goldcarat, sh.mcpergram, sh.goldpergram, sh.fixgold, CURDATE() 
FROM stock_history sh 
JOIN (

SELECT stockid, branch,ACTION , MAX(actiondate) AS MaxDateTime 
FROM stock_history 
GROUP BY stockid,branch,ACTION 
)groupedsh ON sh.stockid = groupedsh.stockid 
AND sh.actiondate = groupedsh.MaxDateTime 
AND sh.branch = groupedsh.branch 
AND sh.action = groupedsh.action 
AND sh.branch = '8' 
AND sh.categoryid = 'G' 
AND sh.action = 'AD' 
AND sh.actiondate <= '2016-03-28 23:59:59' 

これは'AD'としてactionを持っているとmax(actiondate)を持つ行を照会することです。 max(action_date)でクエリに

+0

主キーとは何ですか? 'SHOW CREATE TABLE stock_history'を使って結果を投稿してください。 –

答えて

0

、あなたは例えば、サブクエリを使用する必要があります。:

select field1, field2 
from table 
where 
sh.action = 'AD' 
and sh.actiondate = (
    select max(sh.actiondate) 
     from table 
     where sh.action = 'AD' 
); 
+0

MAXのactiondateは選択された日付よりも短く、最大エントリ値に 'AD'が含まれている場合にのみ返されます。 – Sumith

+0

どのフィールドの 'max'値との比較を含むのかを問い合わせる方法を説明しました。必要に応じて条件を追加することができます。 –

+0

これは1行だけを返します。 OPはグループごとに1つの行を必要とする( 'GROUP BY stockid、branch、ACTION') –

関連する問題