2016-09-05 5 views
0

Мне нужно объединить два запроса mysql.Mysql - объединить два запроса, 1-ая неизменна

первый неизменна, я не могу избежать этого:

select * from `drawings` where `issued` > '2015-08-01'; 

второй должен выбрать только последние изменения для соответствующего числа чертежа и формат файла:

select * 
from drawings a inner join (select number, title, format, 
          max(revision) as revision 
          from drawings 
          group by number, title, format) b 
on a.number = b.number and a.title = b.title and a.format = b.format 
and a.revision = b.revision; 

Любой намек, как я мог бы объединить Это?

Дело в том, что я ничего не могу изменить в 1-й части. Он должен оставаться неизменным, как указано выше ...

Любое решение должно начинаться ПОСЛЕ неизменной 1-й части.

BTW, drawings стол:

+----+---------+-------------+-------+---------+---------------------+ 
| id | number | title  |format | revision| date    | 
+----+---------+-------------+-------+---------+---------------------+ 
| 100| 022588 | some title | dwg | 1  | 2016-01-07 08:00:00 | 
| 101| 022588 | some title | dwg | 2  | 2016-01-07 08:01:00 | 
| 103| 022588 | some title | pdf | 3  | 2016-01-07 08:15:32 | 
| 104| 022588 | some title | dwg | 3  | 2016-01-07 09:10:32 | 
+----+---------+-------------+-------+---------+---------------------+ 

Разъяснение: После 1-й части я мог войти, что я хочу, чтобы получить последние версии для обоих чертежу и Pdf записей, для соответствующего числа чертежной ,

+4

Что вы имеете в виду неизменное? Плохая практика заключается в использовании подстановочных знаков в производственном коде, и одним из способов комбинирования результатов этих двух запросов будет использование «union» или «union all», но для этого потребуется, чтобы оба запроса выбирали одни и те же столбцы, , из-за подстановочных знаков. – Brian

+0

@Brian. Я имею в виду, что я не могу изменить начало запроса. Моя задача - добавить вторую часть к существующему запросу, чтобы получить только последние версии записей dwg и pdf для каждого номера чертежа. Я полагаю, что вы на 100% правы в отношении «плохой практики», однако, откорм шоколада, но я ем его каждый день. Таково живое :-) – beba

ответ

0

Вот мой модифицированный ответ с другого question:

select * from `drawings` where `issued` > '2015-08-01' 

AND `revision` = (
    SELECT MAX(`revision`) 
    FROM `drawings` d2 
    WHERE d2.`number` = drawings.`number` 
     AND d2.`title` = drawings.`title` 
     AND d2.`format` = drawings.`format` 
) 
ORDER BY `number` DESC; 

http://sqlfiddle.com/#!9/cebebc/1

+0

Благословит вас Павел Шпигель, спасибо. – beba

0
SELECT a.* 
    FROM drawings a 
    JOIN 
    (SELECT number 
      , title 
      , format 
      , MAX(revision) revision 
     FROM drawings 
     GROUP 
      BY number 
      , title 
      , format 
    ) b 
    ON b.number = a.number 
    AND b.title = a.title 
    AND b.format = a.format 
    AND b.revision = a.revision 
WHERE a.issued > '2015-08-01'; 
+0

Вы должны использовать «SELECT * FROM рисунки ...» ;-) - см. [Здесь] (http://stackoverflow.com/questions/39334436/mysql-select-max-revision-within- вложенный-оператор). –

+2

@PaulSpiegel Я не понимаю этого правила, поэтому я игнорирую его. Такова жизнь. – Strawberry

+0

Это может быть какой-то странный ORM. Или вроде шаблона запроса, например «SELECT * FROM tablename {% inject_your_code_here%}». Однако, Бебе должен уточнить, что не путать нас. –

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