2017-01-05 3 views
1

Я пытаюсь запустить внутреннее соединение между этой же таблицей. Что не так с моим синтаксисом?Ошибка внутреннего синтаксиса таблицы

(SELECT user_key, bill_number, MAX(payment_date) AS payment_date 
FROM billpayment) bpt 
INNER JOIN (SELECT * FROM billpayment) bp 
    ON bp.user_key=bpt.user_key 
    AND bp.bill_number=bpt.bill_number 
    AND bp.payment_date=bpt.payment_date 
GROUP BY user_key, bill_number; 

Это говорит о том, что команда SQL не должным образом закончилась в круглых скобках в «billpayment)»

+1

MySQL или Oracle? Пожалуйста, отметьте только те СУБД, которые вы используете. – JohnHC

+0

Удалите круглые скобки с начала и после 'FROM billpayment' – CptMisery

+0

. Что вы пытаетесь совершить здесь? Выберите из этой таблицы, где она существует в одной таблице? Поскольку этот запрос делает – JohnHC

ответ

2
SELECT 
    user_key, 
    bill_number, 
    MAX(payment_date) AS payment_date 
    FROM billpayment bpt 
    INNER JOIN billpayment bp 
    ON bp.user_key=bpt.user_key 
    AND bp.bill_number=bpt.bill_number AND bp.payment_date=bpt.payment_date 
    GROUP BY 
    user_key, bill_number 

; 
+0

, он поможет включить условие JOIN ON, например 'bp.payment_date <> bpt.payment_date', чтобы избежать объединения одной записи в левую и правую таблицы или, возможно, исключить критические комбинации ? –

1

На Oracle Попробуйте это:

SELECT * 
    FROM (SELECT user_key, bill_number, MAX (payment_date) AS payment_date FROM billpayment) bpt 
     INNER JOIN billpayment bp 
      ON bp.user_key = bpt.user_key AND bp.bill_number = bpt.bill_number AND bp.payment_date = bpt.payment_date 
    GROUP BY user_key, bill_number; 

Не можете проверить это без структуры таблицы ,

0

Как насчет использования аналитических функций?

select bp.*, 
     max(bp.paymentdate) over (partition by user_key, bill_number) as max_payment_date 
from billpayment 

Если вы хотите поля на макс дату платежа:

select bp.* 
from (select bp.*, 
      max(bp.paymentdate) over (partition by user_key, bill_number) as max_paymentdate 
     from billpayment 
    ) bp 
where paymentdate = max_paymentdate; 
0

На MySql, вы можете попробовать что-то вроде:

SELECT bpt.user_key, bpt.bill_number, MAX(bpt.payment_date) AS payment_date 
FROM billpayment bpt 
INNER JOIN (SELECT * FROM billpayment) bp 
    ON bp.user_key=bpt.user_key 
    AND bp.bill_number=bpt.bill_number 
    AND bp.payment_date=bpt.payment_date 
GROUP BY bpt.user_key, bpt.bill_number; 

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

  • Нет связанных вопросов^_^