2016-03-28 23 views
0

Seçili tarihi ve seçili kategoriyi kullanarak bir tablodan veri almak için bir sorgu yazmam gerekiyor. Bir sorgu yazdım ve beklendiği gibi doğru veriyi vermiyor. action sütunu 'AD' değerine sahipse, yalnızca en fazla actiondate satırları sorgulamalıdır.Maksimum ve özel değerlere sahip MySQL satırları

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' 

Bu 'AD' olarak action ve max(actiondate) sahip satırları sorgulamak etmektir. max(action_date) ile

+0

birincil anahtar nedir kullanmak gerekir? 'TABLO OLUŞTURMA TABLOSU stock_history' seçeneğini kullanın ve sonucu gönderin. –

cevap

0

sorgulamak için, alt sorgu, ör .:

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

MAX eylemi tarihi, seçili tarihin altında olmalı ve yalnızca maksimum giriş değerlerinin 'AD' olması durumunda geri dönmelidir. – Sumith

+0

Herhangi bir alanın "max" değeriyle karşılaştırmayı içerdiğinde nasıl sorgulanacağını açıkladım. Koşulları gerektiğinde ve zamanda ekleyebilirsiniz. –

+0

Bu, yalnızca bir satır döndürür. OP'nin grup başına bir satırı olması gerekir ("GROUP BY stockid, branch, ACTION") –

İlgili konular