2015-11-11 6 views
1

Я новичок MySQL и ищу помощь по объединению результатов запроса. У меня есть три разных запроса SELECT, которые используются для выбора списка пользователей на основе диапазона дат того, как долго они были членами: от 10 до 25 лет, от 25 до 50 лет и 50 или более лет. Эти запросы в настоящее время следующим образом:Объединить результаты нескольких запросов выбора MySQL

Для возвращения членов не менее 10 лет, но менее чем 25:

SELECT `user`.id AS "Member #", 
`user`.initiation_date AS "Initiation Date" 
FROM `user` 
WHERE `user`.initiation_date BETWEEN CURDATE() - INTERVAL 25 YEAR AND CURDATE() - INTERVAL 10 YEAR 

Для возвращения членов, по крайней мере, 25 лет, но менее 50:

SELECT `user`.id AS "Member #", 
`user`.initiation_date AS "Initiation Date" 
FROM `user` 
WHERE `user`.initiation_date BETWEEN CURDATE() - INTERVAL 50 YEAR AND CURDATE() - INTERVAL 25 YEAR 

для возвращения членов, по крайней мере, 50 лет:

SELECT `user`.id AS "Member #", 
`user`.initiation_date AS "Initiation Date" 
FROM `user` 
WHERE `user`.initiation_date <= CURDATE() - INTERVAL 50 YEAR 

Эти три, кажется, работает хорошо Indep но моя цель состоит в том, чтобы объединить результаты этих запросов, чтобы вернуть user.id, user.initiation_date, а также третий столбец, который будет определять, находится ли элемент в «10 году» (запрос 1), «25 Год "(запрос 2) или" 50 год "(запрос 3).

Любая помощь или руководство будет принята с благодарностью.

ответ

0

Попробуйте это, это сработает.

SELECT `user`.id AS Member_No, 
    `user`.initiation_date AS Initiation_Date, 
    (CASE WHEN `user`.initiation_date BETWEEN (CURDATE() - INTERVAL 25 YEAR) AND (CURDATE() - INTERVAL 10 YEAR) THEN '10 Year' 
      WHEN `user`.initiation_date BETWEEN (CURDATE() - INTERVAL 50 YEAR) AND (CURDATE() - INTERVAL 25 YEAR) THEN '25 Year' 
      WHEN `user`.initiation_date <= (CURDATE() - INTERVAL 50 YEAR) THEN '50 Year' 
      ELSE 'None' 
      END) AS Year_category 
    FROM `user` 

Надеется, что это помогает

0

Два варианта здесь.

Вариант 1 (UNION)

SELECT `user`.id AS "Member #", 
`user`.initiation_date AS "Initiation Date", 
"10 Year" AS myRange 
FROM `user` 
WHERE `user`.initiation_date BETWEEN CURDATE() - INTERVAL 50 YEAR AND CURDATE() - INTERVAL 25 YEAR 

UNION 

SELECT `user`.id AS "Member #", 
`user`.initiation_date AS "Initiation Date", 
"25 Year" AS myRange 
FROM `user` 
WHERE `user`.initiation_date BETWEEN CURDATE() - INTERVAL 50 YEAR AND CURDATE() - INTERVAL 25 YEAR 

т.д.

Вариант 2 (CASE)

Вы можете также использовать ИНЕКЕ, чтобы выбрать те члены, которые имели членство в течение 10 лет или больше, а затем используйте предложение CASE в инструкции SELECT.

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