Я пытаюсь выучить sql, это сводит меня с ума. Я не могу понять правильный синтаксис для достижения желаемого результата. Я смотрю видео на udemy и читаю книги по основному SQL, пытаясь научить себя, но кажется, что все они не помогают мне преодолеть этот пробел, который я, кажется, не могу преодолеть.
У меня довольнохорошо разбирается в основах команд SELECT, FROM, WHEN. Кажется, я получаю знания об использовании агрегатных функций, но я ни в коем случае не эксперт.
У меня есть две таблицы: "Orders" и "OrderDet". «Заказы» содержат CustomerName и OrderNo, а OrderDet содержит все остальное, например PartNo, DateFinished, OrderNo и т. Д.
У меня есть ситуация, когда несколько клиентов могут заказать один и тот же номер детали. Я хочу показать все последние заказы, которые разместили все клиенты.
Например
SELECT Orders.CustDesc, OrderDet.OrderNo, OrderDet.PartNo, OrderDet.DateFinished
FROM Orders
JOIN OrderDet ON Orders.OrderNo = OrderDet.OrderNo
ORDER BY OrderDet.PartNo, OrderDet.DateFinished
Этот запрос возвращает:
Customer OrderNo PartNo Date Finished
--------------------------------------------------------
Cust 1 5032 12345678-1 NULL
Cust 2 10032 12345678-1 2019-06-05 14:54:25.853
Cust 2 1048 12345678-1 2019-07-08 00:00:00.000
Cust 1 5028 12345678-1 2019-09-30 11:45:45.960
Cust 1 5029 12345678-1 2019-09-30 12:49:35.713
Cust 1 5030 12345678-1 2019-09-30 13:04:57.333
Cust 1 5031 12345678-1 2019-10-10 13:58:22.653
Я все еще изучаю, когда и какиспользовать агрегатную функцию, но, кажется, не в состоянии полностью понять концепцию. Я пытался использовать MAX для столбца Date и GROUP BY Customer и PartNo, но до тех пор, пока я не удалю номер заказа, выходные данные никогда не упадут до того, что я хочу.
Например, я использовал:
SELECT Orders.CustDesc, OrderDet.PartNo, MAX(OrderDet.DateFinished)
FROM Orders
JOIN OrderDet ON Orders.OrderNo = OrderDet.OrderNo
GROUP BY Orders.CustDesc, OrderDet.PartNo
ORDER BY OrderDet.PartNo
Удаление OrderDet.OrderNo из SELECT и OrderDet.DateFinished из Order By. Это возвращает желаемый вывод строки, но не хватает всех нужных столбцов.
Customer PartNo Date Finished
--------------------------------------------
Cust 2 12345678-1 2019-07-08 00:00:00.000
Cust 1 12345678-1 2019-10-10 13:58:22.653
Как только я пытаюсь добавить OrderNo обратно в микс, я получаю тот же вывод, что и первый. Я думаю, что понимаю, почему это происходит, потому что все OrderNo уникальны и не могут быть сгруппированы, но я не могу понять, как это преодолеть.
Я понимаю, что это базовая команда SQL, но я не могу понять, какчтобы получить желаемый результат. В этом примере я хотел видеть только две строки уникальных клиентов, основанные на последней дате, когда PartNo был закончен, но показывать содержимое всех строк. Не только три столбца.
Опять же, я пытаюсь изучить этот материал, и я могу только читать и перечитывать один и тот же базовый контент, чтобы научиться делать это так долго. Кажется, во всем, что я читаю, не хватает информации, которая нужна моему мозгу для того момента "АХ ХА".
Возможно, кто-то может помочь преодолеть этот разрыв?