CREATE TABLE IF NOT EXISTS `sporesfungi` (
`IDSpore` varchar(4) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`Name` varchar(25) NOT NULL,
`Type` varchar(10) NOT NULL,
PRIMARY KEY (`IDSpore`),
KEY `IDSpore` (`IDSpore`)
)
CREATE TABLE IF NOT EXISTS `sporecount` (
`IDSpore` varchar(4) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL,
`TraceNum` int(2) NOT NULL,
`TraceHour` int(4) NOT NULL,
`Amount` int(11) NOT NULL,
`Date` date NOT NULL,
UNIQUE KEY `IDSpore_2` (`IDSpore`,`TraceHour`,`Date`),
KEY `IDSpore` (`IDSpore`)
)
由于我无法发布图片,因此我尝试做的就是从Type
和sporesfungi
& {}获取Amount
。来自IDSpore
的{{1}}并进行内部联接,但是来自sporecount
我只想要最新的日期数据,其中sporecount
= 12这是它将具有的最高值。
所以我想要TraceNum
达到12的最近日期的所有数据。
这是我尝试过但没有结果
TraceNum
这是我目前在桌面上进行测试的内容。
SELECT Amount, IDSpore, sporesfungi.Type FROM sporecount
INNER JOIN sporesfungi ON sporecount.IDSpore = sporesfungi.IDSpore AS a
WHERE Date = (
SELECT MAX(Date)
FROM sporecount AS b
WHERE a.IDSpore = b.IDSpore)
IF(MAX(b.TraceNum) = 12, 1, 0) =1
我希望我很清楚,欢迎任何建议。
答案 0 :(得分:1)
构建此查询有两个步骤。首先,我们需要找到孢子达到tracenum
为12的最后日期。由于您说它每天只能达到12次,我们会忽略tracehour
。
select idspore, max(`date`)
from sporecount
where tracenum = 12
group by idspore
然后我们需要加入查询的结果,从sporesfungi表中获取数据。
select sf.*, sc.amount
from sporesfungi sf
inner join sporecount sc
on sf.idspore = sc.idspore
inner join (
select idspore, max(`date`) d
from sporecount
where tracenum = 12
group by idspore
) q
on sc.date = q.d
and sc.idspore = q.idspore
where sc.tracenum = 12 ; -- we do this check again because the
子查询连接将导致多行。
更新后
从评论中看来,我们似乎处于不同的波长。你似乎想要的是找到任何孢子击中12的tracenum的最后日期,然后返回当天所有孢子的所有数据。这实际上简化了事情。
select sf.*, sc.*
from sporesfungi sf
inner join sporecount sc
on sf.idspore = sc.idspore
inner join (
select max(`date`) d
from sporecount
where tracenum = 12
) q
on sc.date = q.d;
答案 1 :(得分:0)
尝试这样的事情
SELECT sc.Amount, sc.IDSpore, sf.Type
FROM sporecount sc INNER JOIN
(SELECT IDSpore, MAX(Date) AS last_date
FROM sporecount
WHERE TraceNum= 12
GROUP BY IDSpore
) last_sc
ON last_sc.IDSpore=sc.IDSpore
AND last_sc.last_date = sc.Date
INNER JOIN sporefungi sf
ON sf.IDSpore = sc.IDSpore