2015-08-26 3 views
-2
Table 1: 
    - user_id 
    - item_id 
    - time 
    - day 
Table 2: 
    - user_id 
    - phone no 
Table 3: 
    - create_time 
    - phone no 

Я должен получить все item_ids из таблицы 1, где user_id соответствует указанным в таблице 2 и create_time из таблицы 3 больше, чем на определенную дату (х), где день в таблице 1, 18 августаHIVE SELECT FROM 3 ТАБЛИЦЫ

Может ли кто-нибудь помочь мне с запросом?

+0

Вы пытались написать какой-либо код самостоятельно? – whereisSQL

ответ

0

Основываясь на вашей структуре таблицы, соотношение между таблицей 2 и таблицей 3 является номером телефона. ?

Попробуйте этот запрос:

enter code here 
SELECT * FROM Table1 
INNER JOIN Table2 ON Table1.user_id = Table2.user_id 
INNER JOIN Table3 ON Table2.[phone no] = Table3.[phone no] 

ГДЕ Таблица3 [create_time] < ПРАВЫЙ (CONVERT (CHAR (08), Таблица3 [create_time], 112), 4.) = '0818' И Таблица1.. [Day] = RIGHT (CONVERT (CHAR (08), Table1. [Day], 112), 4) = '0818'

Кроме того, при создании имени столбца лучше всего использовать пробелы, сделайте это одним словом. Вот почему я кладу скобку [], когда я присоединяюсь к таблице2 и таблице3, чтобы избежать ошибок.

+0

Существует еще одно условие для таблицы 3, что время create_time должно быть меньше 18 августа, а день из таблицы 1 должен быть 18 августа. Как включить их? –

+0

@SavinayNarendra, считая, что тип данных вашего дня в таблице 1 равен datetime. Я также предполагаю, что тип данных вашего create_time в таблице3 также равен дате. -Regards :) – Japongskie

+0

На самом деле оба являются строками. день в таблице 1 хранится как «yyyy-mm-dd», а create_time в таблице 3 хранится как «unix_timestamp». Можно ли сравнивать строку напрямую с большим int. Я беру отметку времени на 18 августа и сравниваю. –