2015-05-14 2 views
2
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 из sporecount и сделать внутреннее соединение, но от sporecount Мне нужны только последние данные даты, где он имеет TraceNum = 12, что является самым высоким значением, которое у него будет.заявление MYSQL SELECT, где последняя дата Если Трассировка = 12

Так что я хочу, чтобы все данные о самой последней датой, когда TraceNum достиг 12.

Это то, что я пытался, но никаких результатов пока

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 

Это то, что я в настоящее время на мой стол для тестирования.

INSERT INTO `sporecount` (`IDSpore`, `TraceNum`, `TraceHour`, `Amount`, `Date`) VALUES 
('C', 10, 1400, 1, '2015-05-14'), 
('e', 4, 200, 1, '2015-05-14'), 
('d', 8, 1800, 1, '2015-05-14'), 
('r', 5, 0, 1, '2015-05-14'), 
('t', 6, 2200, 1, '2015-05-14'), 
('q', 2, 600, 1, '2015-05-14'), 
('w', 3, 400, 1, '2015-05-14'), 
('a', 1, 800, 1, '2015-05-14'), 
('2', 12, 1000, 1, '2015-05-14'), 
('y', 7, 2000, 1, '2015-05-14'), 
('1', 9, 1600, 1, '2015-05-14'), 
('A', 11, 1200, 1, '2015-05-14'), 
('x', 9, 1630, 1, '2015-05-11'), 
('z', 9, 1630, 1, '2015-05-11'), 
('s', 9, 1630, 1, '2015-05-11'), 
('s', 11, 1230, 1, '2015-05-11'), 
('s', 1, 830, 2, '2015-05-11'), 
('s', 2, 630, 1, '2015-05-11'), 
('r', 10, 1430, 1, '2015-05-11'), 
('d', 9, 1630, 1, '2015-05-11'), 
('q', 6, 2230, 1, '2015-05-11'), 
('q', 10, 1430, 2, '2015-05-11'), 
('s', 8, 1830, 1, '2015-05-11'), 
('t', 10, 1430, 1, '2015-05-11'), 
('x', 11, 1230, 1, '2015-05-11'), 
('x', 12, 1030, 2, '2015-05-11'), 
('w', 6, 2230, 1, '2015-05-11'), 
('w', 10, 1430, 1, '2015-05-11'), 
('w', 11, 1230, 2, '2015-05-11'), 
('x', 6, 2230, 2, '2015-05-11'), 
('w', 2, 630, 1, '2015-05-11'), 
('w', 5, 30, 1, '2015-05-11'), 
('u', 7, 2030, 1, '2015-05-11'), 
('y', 7, 2030, 1, '2015-05-11'), 
('t', 7, 2030, 2, '2015-05-11'), 
('v', 12, 1030, 2, '2015-05-11'), 
('q', 5, 30, 2, '2015-05-11'), 
('h', 7, 2030, 1, '2015-05-11'), 
('a', 11, 1230, 1, '2015-05-11'), 
('a', 12, 1030, 1, '2015-05-11'), 
('a', 1, 830, 1, '2015-05-11'), 
('a', 2, 630, 2, '2015-05-11'), 
('T', 3, 430, 1, '2015-05-11'), 
('S', 3, 430, 1, '2015-05-11'), 
('R', 3, 430, 1, '2015-05-11'), 
('D', 3, 430, 1, '2015-05-11'), 
('1', 4, 230, 1, '2015-05-11'), 
('C', 3, 430, 1, '2015-05-11'), 
('4', 4, 230, 1, '2015-05-11'), 
('3', 4, 230, 2, '2015-05-11'), 
('a', 10, 1430, 1, '2015-05-11'), 
('a', 8, 1830, 1, '2015-05-11'), 
('h', 1, 830, 1, '2015-05-11'), 
('g', 1, 830, 2, '2015-05-11'), 
('e', 9, 1630, 1, '2015-05-11'), 
('e', 10, 1430, 1, '2015-05-11'), 
('e', 2, 630, 1, '2015-05-11'), 
('e', 5, 30, 1, '2015-05-11'), 
('d', 6, 2230, 1, '2015-05-11'), 
('d', 8, 1830, 1, '2015-05-11'), 
('d', 2, 630, 1, '2015-05-11'), 
('c', 8, 1830, 1, '2015-05-11'), 
('c', 12, 1030, 1, '2015-05-11'), 
('a', 6, 2230, 1, '2015-05-11'), 
('2', 4, 230, 1, '2015-05-11'); 

INSERT INTO `sporesfungi` (`IDSpore`, `Name`, `Type`) VALUES 
('', '', ''), 
('0', 'Basidiosporas', 'Fungus'), 
('1', 'Ascosporas', 'Fungus'), 
('2', 'Penicillum/Aspergillus', 'Fungus'), 
('3', 'BasidiosporasPleurotus', 'Fungus'), 
('4', 'Other', 'Fungus'), 
('5', 'Cladospori', 'Fungus'), 
('6', 'Coprinus/A', 'Fungus'), 
('7', 'Basidio Tr', 'Fungus'), 
('8', 'Ganoderma', 'Fungus'), 
('9', 'Cecropia', 'Fungus'), 
('A', 'Delitschia', 'Fungus'), 
('C', 'Rumex', 'Trees'), 
('D', 'Smut/Myxomycete', 'Fungus'), 
('E', 'Spegazzinia', 'Fungus'), 
('F', 'Sporomiella (A)', 'Fungus'), 
('G', 'Torula', 'Fungus'), 
('H', 'Pollen', 'Grass'), 
('I', 'Arthrinium', 'Fungus'), 
('J', 'Arbol', 'Trees'), 
('K', 'Arthrocarpus', 'Trees'), 
('L', 'Casuarina/Myrica', 'Trees'), 
('O', 'Xylariae', 'Fungus'), 
('P', 'Botrytis', 'Fungus'), 
('Q', 'Spondylocladiella', 'Fungus'), 
('R', 'Tetraploa', 'Fungus'), 
('S', 'Diatrypaceae', 'Fungus'), 
('T', 'Ulocladium', 'Fungus'), 
('U', 'Amphisphaeria (A)', 'Fungus'), 
('W', 'Stemphylium', 'Fungus'), 
('X', 'Mimosa', 'Trees'), 
('Y', 'Agrocybe-type', 'Fungus'), 
('Z', 'Mangle', 'Trees'), 
('a', 'Fusarium', 'Fungus'), 
('b', 'Pleospora', 'Fungus'), 
('c', 'Leptosphaerulina', 'Fungus'), 
('d', 'Helocomyces', 'Fungus'), 
('e', 'Periconia', 'Fungus'), 
('f', 'Acrodictys', 'Fungus'), 
('g', 'Alternaria', 'Fungus'), 
('h', 'Bipolaris', 'Fungus'), 
('i', 'Poaceae', 'Grass'), 
('j', 'Cerebella', 'Fungus'), 
('k', 'Dreshlera/Helmitosporum', 'Fungus'), 
('l', 'Epicoccum', 'Fungus'), 
('m', 'Rusts Puccinia', 'Fungus'), 
('n', 'Nigrospora', 'Fungus'), 
('o', 'Hifas Fragmentos', 'Fungus'), 
('p', 'Curvularia', 'Fungus'), 
('q', 'Ustilago', 'Fungus'), 
('r', 'Helicoma', 'Fungus'), 
('s', 'Helicomina', 'Fungus'), 
('t', 'Leptosphaeria-Like', 'Fungus'), 
('u', 'Chaetomiun', 'Fungus'), 
('v', 'Pithomyces', 'Fungus'), 
('w', 'Cercospora', 'Fungus'), 
('x', 'Exserohilum', 'Fungus'), 
('y', 'Tetrapyrgos', 'Fungus'), 
('z', 'Erysiphe/Oidium', 'Fungus'); 

Надеюсь, я достаточно ясен, любые предложения приветствуются.

+0

Вы не можете создавать встроенные изображения, но вы можете загрузить на Imgur и включить ссылку на пост. –

+0

Что вам нужно, если нет спороучета с tracenum = 12? никаких строк вообще или данных sporesfungi, без соответствующих значений из другой таблицы? может ли tracenum достичь 12 более одного раза в определенный день? в разные часы? –

+0

@pala_ no, если нет данных с traceNum = 12, то я бы хотел проверить предыдущий день, если они есть. Он достигнет 12 только один раз в день. – Alf

ответ

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 

Подтверждение подзапроса приведет к более чем одной строке.

demo here

после обновления

Из комментариев - кажется, что мы были на разных длинах волн. То, что вам кажется нужным, - это найти последнюю дату, когда ЛЮБАЯ спора ударила по тротенку 12, а затем вернула ВСЕ данные для ВСЕХ спор в этот день. Это фактически упрощает вещи.

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; 

Updated Fiddle

+0

Хорошо, я попробую это и вернусь с результатом. – Alf

+0

@alf спасибо за данные в вопросе - я обновил этот ответ демо. как выглядят результаты? –

+0

колодец подавлен, чтобы дать мне по крайней мере 12 строк назад, theres только 5 – Alf

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 
+0

Хорошо, исправил его, но я не получаю данные правильно, может быть, GROUP BY? – Alf

+0

Лучше покажите нам некоторые данные и результаты. Я предполагаю, что есть что-то непонятное о следе. – Tim3880

+0

Попытайтесь добавить некоторые изображения текущих данных в мою таблицу и результаты – Alf

Смежные вопросы