2012-03-07 5 views
4

MySQL таблицыMySQL Добавление новых столбцов в результатах запроса

reject_data

+-----------+-----------------+------------------+---------------+ 
| reject_id | reject_location | reject_equipment | reject_time | 
+-----------+-----------------+------------------+---------------+ 
| 1   | 7    | 6    | 1326795921000 | 
+-----------+-----------------+------------------+---------------+ 
| 2   | 7    | 1    | 1326796641000 | 
+-----------+-----------------+------------------+---------------+ 
| 3   | 7    | 6    | 1326799521000 | 
+-----------+-----------------+------------------+---------------+ 
| 4   | 6    | 5    | 1326800781000 | 
+-----------+-----------------+------------------+---------------+ 
| 5   | 7    | 3    | 1326802281000 | 
+-----------+-----------------+------------------+---------------+ 
| 6   | 7    | 4    | 1326802941000 | 
+-----------+-----------------+------------------+---------------+ 
| 7   | 7    | 1    | 1326814161000 | 
+-----------+-----------------+------------------+---------------+ 
| 8   | 6    | 2    | 1328026700000 | 
+-----------+-----------------+------------------+---------------+ 

оборудование

+--------------+------------------+ 
| equipment_id | equipment_string | 
+--------------+------------------+ 
| 1   | Microdoser  | 
+--------------+------------------+ 
| 2   | Monoblock  | 
+--------------+------------------+ 
| 3   | Valve Magnet  | 
+--------------+------------------+ 
| 4   | Checkweigher  | 
+--------------+------------------+ 
| 5   | Microleak  | 
+--------------+------------------+ 
| 6   | Capper   | 
+--------------+------------------+ 

места

+-------------+-----------------+ 
| location_id | location_string | 
+-------------+-----------------+ 
| 1   | Fred Line 1  | 
+-------------+-----------------+ 
| 2   | Fred Line 2  | 
+-------------+-----------------+ 
| 3   | Fred Line 3  | 
+-------------+-----------------+ 
| 4   | Bob Line 1  | 
+-------------+-----------------+ 
| 5   | Bob Line 2  | 
+-------------+-----------------+ 
| 6   | Bob Line 3  | 
+-------------+-----------------+ 
| 7   | Jeff Line 1  | 
+-------------+-----------------+ 
| 8   | Jeff Line 2  | 
+-------------+-----------------+ 
| 9   | Jeff Line 3  | 
+-------------+-----------------+ 

emrs_d ата

+---------+---------------+-----------+-------------+---------------+ 
| emrs_id | emrs_location | emrs_code | emrs_string | emrs_time  | 
+---------+---------------+-----------+-------------+---------------+ 
| 1  | 8    | 8744751 | String Text | 1331051832000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 2  | 3    | 8660465 | String Text | 1331051832000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 3  | 6    | 8665447 | String Text | 1331055356000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 4  | 7    | 8762177 | String Text | 1331060531000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 5  | 4    | 8547253 | String Text | 1331061898000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 6  | 9    | 8744580 | String Text | 1331062654000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 7  | 2    | 8668716 | String Text | 1331064810000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 8  | 1    | 8665436 | String Text | 1331066757000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 9  | 5    | 8761458 | String Text | 1331066847000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 10  | 8    | 8743520 | String Text | 1331068372000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 11  | 3    | 8708691 | String Text | 1331070587000 | 
+---------+---------------+-----------+-------------+---------------+ 
| 12  | 7    | 8811149 | String Text | 1331071045000 | 
+---------+---------------+-----------+-------------+---------------+ 

Текущие запросы

следующий запрос является то, что я в настоящее время используют, пожалуйста, обратите внимание, что я использовал «IN», потому что они являются динамическими, то же самое для «между» значениями.

SELECT location_string, equipment_string, reject_time 
FROM reject_data, equipment, locations 
WHERE reject_equipment = equipment_id 
    AND reject_location = location_id 
    AND reject_location IN (7) 
    AND reject_equipment IN (1,2,3,4,5,6) 
    AND reject_time BETWEEN 0 AND 1331113803000 
ORDER BY reject_id DESC 
LIMIT 100 

Вопрос

То, что я хотел бы сделать, это добавить две колонки справа, содержащей emrs_code и emrs_string, смотрите таблицу ниже в качестве примера. Проблема, с которой я сталкиваюсь, заключается в попытке получить соответствующие emrs_code и emrs_string для каждой записи отклонения, я хочу только вернуть один набор результатов emrs для каждого отклонения, а данные emrs должны быть от ближайшего предыдущего времени по сравнению с методом reject_time, объяснить так вот запрос, который получает мне правильную информацию для predifined места и времени:

SELECT emrs_code, emrs_string 
FROM `rejectlogging`.`emrs_data` 
WHERE emrs_time <= 1331113803000 AND emrs_location = 7 
ORDER BY emrs_time DESC 
LIMIT 1; 

я в основном застрял на получение выше слито в исходный запрос. Любая помощь приветствуется. Спасибо.

Желаемая Result

+-----------------+------------------+---------------+-----------+-------------+ 
| location_string | equipment_string | reject_time | emrs_code | emrs_string | 
+-----------------+------------------+---------------+-----------+-------------+ 
| A7    | Microleak  | 1331064910000 | 8762177 | String Text | 
+-----------------+------------------+---------------+-----------+-------------+ 
| A3    | Checkweigher  | 1331107261000 | 8708691 | String Text | 
+-----------------+------------------+---------------+-----------+-------------+ 
| A1    | Microdoser  | 1331107166000 | 8665436 | String Text | 
+-----------------+------------------+---------------+-----------+-------------+ 
| A2    | Microdoser  | 1331107161000 | 8668716 | String Text | 
+-----------------+------------------+---------------+-----------+-------------+ 
| A4    | Microleak  | 1331105836000 | 8547253 | String Text | 
+-----------------+------------------+---------------+-----------+-------------+ 
+0

+1 только для усилия, приложенного в вопросе – Ben

ответ

2

Попробуйте :-(ОБНОВЛЕНО)

SELECT location_string, equipment_string, reject_time , (SELECT emrs_code 
FROM `rejectlogging`.`emrs_data` 
WHERE emrs_time <= reject_data.reject_time AND emrs_location = reject_data.reject_location 
ORDER BY emrs_time DESC 
LIMIT 1) as emrs_code, 
(SELECT emrs_string 
FROM `rejectlogging`.`emrs_data` 
WHERE emrs_time <= reject_data.reject_time AND emrs_location = reject_data.reject_location 
ORDER BY emrs_time DESC 
LIMIT 1) as emrs_string 
FROM reject_data, equipment, locations 
WHERE reject_equipment = equipment_id 
    AND reject_location = location_id 
    AND reject_location IN (7) 
    AND reject_equipment IN (1,2,3,4,5,6) 
    AND reject_time BETWEEN 0 AND 1331113803000 
ORDER BY reject_id DESC 
LIMIT 100 
+0

Спасибо за ответ, расположение является правильным, но данные для emrs_code и emrs_string должны иметь отношение к каждому отклонять, то emrs_location и emrs_time должно быть так же, как и каждая найденная ошибка. – Matthew

+0

Я уже обновил запрос. повторите попытку –

+0

Это, похоже, именно то, что я был после! Большое вам спасибо за вашу помощь, действительно ценю это. – Matthew

0

Попробуйте это:

SELECT location_string, equipment_string, reject_time 
FROM reject_data rd 
    INNER JOIN locations l on rd.reject_location = l.location_id 
    INNER JOIN equipment e on rd.reject_equipment = e.equipment_id 
    INNER JOIN 
    (
     SELECT * FROM emrs_data 
     WHERE emrs_time <= 1331113803000 AND emrs_location = 7 
     ORDER BY emrs_time DESC 
     LIMIT 1 
    ) d ON rd.reject_location = d.emrs_location 
WHERE rd.reject_location IN (7) 
AND rd.reject_equipment IN (1,2,3,4,5,6) 
AND rd.reject_time  BETWEEN 0 AND 1331113803000 
ORDER BY rd.reject_id DESC 
LIMIT 100 
+0

Спасибо, получение - Код ошибки: 1054. Неизвестный столбец 'ed.emrs_location' в 'on clause' – Matthew

+0

@Matthew, Извините, это 'd.emrs_location' Я исправлен, d является псевдонимом для подзапроса, который представляет ваш второй запрос. –

0

Предполагая, что время и место строки, что используется (хотя теоретически не могло быть многократных emrs при в то же время и место?

SELECT 
    location_string, 
    equipment_string, 
    reject_time, 
    emrs_code, 
    emrs_string 
FROM 
    reject_data 
    INNER JOIN equipment 
     ON (reject_equipment = equipment_id) 
    INNER JOIN locations 
     ON (reject_location = location_id) 
    INNER JOIN emrs_data 
     ON 
     (
      reject_time = emrs_time 
      AND 
      reject_location = emrs_location 
     ) 
WHERE 
    reject_location IN (7) 
    AND 
    reject_equipment IN (1,2,3,4,5,6) 
    AND 
    reject_time BETWEEN 0 AND 1331113803000 
ORDER BY 
    reject_id DESC 
LIMIT 100 
Смежные вопросы