Невозможно запросить необходимые данные на основе начального действия

#amazon-redshift

#amazon-redshift

Вопрос:

Поэтому я думаю, что лучший способ сделать это — изложить все по буквам, я пробовал много запросов и потерпел неудачу, поэтому я обращаюсь к вам, замечательные люди, которые занимаются этим гораздо дольше. Данные, которые я извлекаю, содержат 4 столбца: Order_num (хранит номер заказа), Order_status_username (имя пользователя), Order_Status_text (указывает отправленное сообщение) и Order_Status_Time (время отправки сообщения). Итак, мне нужны две вещи, сначала мне нужны результаты этого запроса:

 Select count(distinct order_num ) as Total
From pos.order_status 
Where order_num in (Select order_num From pos.order_status Where order_status_username = 'stanleyb' and trunc(order_status_added) = '2020-10-01' and order_status_text ilike 'Sent to florist%')

Union 

Select count(distinct order_num) as Stayed
From pos.order_status 
where order_status_text Ilike '%to [Delivered]' and 
order_num in (Select order_num From pos.order_status Where order_status_username = 'stanley' and trunc(order_status_added) = '2020-10-01' and order_status_text ilike 'Sent to florist%') 
  

Который предоставляет общее количество заказов, которые он отправил вручную. Теперь мне нужно количество заказов, отправленных этим Стэнли, которые получили конкретное сообщение после отправки заказа. данные содержат новую строку для каждого раза, когда данные заказа пересылаются между нами и нашими поставщиками. Я попытался использовать:

 Select count(distinct order_num) as Stayed
From pos.order_status 
where order_status_text Ilike '%to [Delivered]' and 
order_num in (Select order_num From pos.order_status Where order_status_username = 'stanleyb' and trunc(order_status_added) = '2020-10-01' and order_status_text ilike 'Sent to florist%')
  

Но это не позволяет мне сделать так, чтобы отображаемые в нем статусы, связанные по номеру заказа, были отправлены после того, как Стэнли отправил свое сообщение. Я попытался присоединиться, мне кажется, я что-то упускаю. Union вроде бы работал, но все еще была проблема с тем, чтобы убедиться, что он отправляет данные только после события отправки сообщения Stanley, которое включало «Отправлено флористу%». Если вы можете дать какое-либо представление, продолжайте учиться.

Комментарии:

1. Чувак, это заставляет меня чувствовать, что Redshift отпугнул всех.

Ответ №1:

Получить все записи Стэнли и объединить их pos.order_status , чтобы получить записи, которые:

  • имейте то же самое order_num
  • происходит после его сообщения
  • есть нужный текст.

Я использовал подробные псевдонимы таблиц, чтобы попытаться сделать логику более понятной.

 SELECT COUNT(DISTINCT after_stanlys_message.order_num)
FROM
  pos.order_status stanlys_message
  JOIN pos.order_status after_stanlys_message ON
    after_stanlys_message.order_num = stanlys_message.order_num
    AND after_stanlys_message.order_status_time > stanlys_message.order_status_time
    AND after_stanlys_message.order_status_text ILIKE '%to [Delivered]'
WHERE
  stanlys_message.order_status_username = 'stanleyb'
  AND TRUNC(stanlys_message.order_status_added) = '2020-10-01'
  AND stanlys_message.order_status_text ILIKE 'Sent to florist%'
  

Комментарии:

1. Победитель, победитель, куриный ужин. Спасибо. Забавно, у меня есть база, чтобы придумать что-то подобное, но я склонен усложнять это.