#sql #sql-server #tsql #sqltransaction
#sql #sql-сервер #tsql #sqltransaction
Вопрос:
Моя задача — показать количество товаров, доставленных владельцем магазина [идентификатор пользователя] за последний час. Ниже приведены конструкции таблиц [Заказать родительскую таблицу] [Заказать дочернюю таблицу]
Заказать родительскую таблицу:
Дочерняя таблица:
Элементы сканируются с помощью считывателя штрих-кодов, после сканирования они обновляются в базе данных, после выполнения заказа обновляется измененный штамп.
Как подойти к этому сценарию? Нужно ли мне изменять дизайн базы данных или я могу использовать текущий дизайн для получения набора результатов?
Мой вывод: во внешнем интерфейсе,
Количество последних часов = 10
Комментарии:
1. Не могли бы вы обновить результаты в виде текста
Ответ №1:
Предполагая, что столбец [Item Placed]
предоставит количество элементов, которые будут доставлены.
SELECT SUM([Item Placed])
FROM [Order parent table] OP
JOIN [Order child table] OC ON OP.ID=OC.OrderID
WHERE OP.OrderStatus='D'
AND DATEDIFF(MINUTE, OP.[Order Modified Timestamp], GETDATE()) <= 60
AND [user Id] = 1 --mention the user id here
--AND OC.[Item Status]='D' --Apply this filter with valid status if you require child table stus
Комментарии:
1. получил набор результатов, но я смотрю глубже. можно ли с вами пообщаться?
2. конечно .. но как .. не использовал его .. 🙂
Ответ №2:
Это может помочь:
SELECT ord.[User Id] ,
SUM(ISNULL(oc.ItemCount, 0)) Items
FROM [Order] ord
LEFT JOIN ( SELECT [Order ID] ,
COUNT(DISTINCT [Item Name]) ItemCount
FROM [OrderChild] oc
GROUP BY [Order ID]
) oc ON ord.[ID] = oc.[Order ID]
WHERE [Order Status] = 'D'
AND DATEDIFF(MINUTE, [Order Modified Timestamp], GETDATE()) <= 60
GROUP BY ord.[User Id];
Комментарии:
1. статус заказа здесь не требуется, мой вопрос в том, сколько товаров он доставил за последний час.
2. удалите фильтр [Статус заказа] = ‘D’, чтобы получить то, что вы хотите от моего запроса. И результатом будут элементы, доставленные каждым пользователем в вашу таблицу [Order]