У меня проблема с получением некоторых данных. У меня есть 4 таблицы
пользователя
user_profile
user_income
tax_categoryПроблема при объединении двух запросов
мне нужно выбрать налоговую категорию, применимую к каждому пользователю. Для этого у меня есть два вопроса:
Первый выбирает общий доход и возраст пользователя, а второй выбирает категорию налога, применимую к пользователю. Но я не был в состоянии преобразовать это в один запрос
SELECT userid,user_profile_gender,date_part('years',age(user_profile_dob))+1 AS userage,incomeresult.totalincome FROM user
LEFT JOIN user_profile ON user_profile_userid = user.userid
INNER JOIN
(SELECT SUM(income_amount) totalincome, income_userid FROM user_income
WHERE income_date BETWEEN '2012-03-30' AND '2014-03-30'
GROUP BY income_userid) AS incomeresult ON user.userid = incomeresult.income_userid
WHERE user.status = 1
SELECT * FROM tax_category
WHERE 70 BETWEEN taxcategory_agefrom AND taxcategory_ageto AND taxcategory_gender=1 AND 12000 BETWEEN taxcategory_incomefrom AND taxcategory_incometo
Во втором запросе 70
должно быть значение от userage
, 1
из user_profile_gender
и 12000
от incomeresult.totalincome
.
Возможно ли создать такой запрос? Я использую PostgreSQL 8.4
Убедитесь, что между оператором предоставляется право конечных точек. Если ваши значения даты не имеют временной составляющей, это, вероятно, делает то, что вы хотите. Но если есть компонент времени в день, то никакие записи с датой 2014-03-30, которые происходят после полуночи (12:00:00 AM), не будут включены. Возможно, вы захотите использовать 2014-03-31 минус одна миллисекунда в качестве своего верхнего диапазона. –