Hardevsinh Mori Ответов: 2

Как получить сегодня и на следующий день как один день?


У меня есть производственный модуль, который имеет две смены, одна-дневная смена, а другая-ночная смена,я хочу получить общее производство дневной и ночной смены
Например.
12/02/2016 день смены с 8: 00: 00 утра до 8:00: 00 вечера производство 400 кгс
12/022016 смена ночь с 8: 00: 00 вечера до 13/02/2016 8: 00: 00 утра производство 600 кг

я хочу получить общий объем производства 12/02/2016 1000 кг в соответствии с моей сменой

я не имею ни малейшего представления об этом, пожалуйста, ответьте, если таковые имеются?

время переключения фиксируется
День :С 8: 00: 00 Утра До 8:00: 00 Вечера
Ночь :с 8: 00: 00 вечера до следующего дня 8: 00: 00 утра

я выполню sql-запрос, чтобы получить общее производство по дате

запрос будет выглядеть примерно так:
select sum(tot_qty) from production where date="12/02/2016";


он вернет двухсменное общее производство, как я описал выше.

Что я уже пробовал:

я понятия не имею об этом, пожалуйста, помогите!

Thomas Nielsen - getCore

Простите меня, это немного неясно. Вы спрашиваете о SQL-запросе или о том, как обрабатывать тип возвращаемого значения из вашего админ-модуля? Это список, если так, пожалуйста, предоставьте определение возвращаемого типа, чтобы мы могли помочь вам с вашим linq или что-то еще.

[no name]

я улучшил свой вопрос, я просто хочу сумму производства (в килограммах) одного дня, но день будет засчитываться как сегодняшняя дневная смена на следующую дневную смену.

2 Ответов

Рейтинг:
9

Thomas Nielsen - getCore

SELECT SUM(TOT_QTY)
FROM PRODUCTION
WHERE DATE BETWEEN '12/02/2016 08:00:00' AND '13/02/2016 07:59:59'


[no name]

я просто хочу прояснить, что этот результат будет точным? Результат должен быть между этим временем и датой
Спасибо Томасу за проявленный интерес к вопросу.

Thomas Nielsen - getCore

yes BETWEEN-это полностью легальное заявление TSQL. Если вы хотите с точностью до миллисекунды изменить вторую дату par tof на "13/02/2016 07:59:59.999", но разница, по-видимому, академическая, Microsoft ref: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/between-transact-sql

[no name]

Спасибо, но на самом деле я просто хочу, чтобы в часах и минутах разница была, так что это не проблема.

Рейтинг:
20

FranzBe

Я бы попробовал

CREATE TABLE #testprod (id INT IDENTITY(1,1), [date] DATETIME, tot_qty FLOAT)
INSERT INTO #testprod ([date], tot_qty) VALUES ( DATETIMEFROMPARTS(2016,2,12, 9,0,0,0), 100)
INSERT INTO #testprod ([date], tot_qty) VALUES ( DATETIMEFROMPARTS(2016,2,12, 11,0,0,0), 300)
INSERT INTO #testprod ([date], tot_qty) VALUES ( DATETIMEFROMPARTS(2016,2,12, 22,0,0,0), 200)
INSERT INTO #testprod ([date], tot_qty) VALUES ( DATETIMEFROMPARTS(2016,2,13, 07,59,0,0), 400)


SELECT
       dateadd(day,datediff(day,0, DATEADD(hour, -8, date ) ),0)  as day
     , SUM(TOT_QTY)
FROM #testprod
GROUP BY
      dateadd(day,datediff(day,0, DATEADD(hour, -8, date ) ),0)

то
dateadd(day,datediff(day,0,  date  ),0)

сгруппируем все записи разных времен по дням
и
DATEADD(hour, -8, date )

"переместит" фактическое время записи назад на 8 часов, так что теперь оно соответствует "нормальным" границам дня


[no name]

Спасибо @FranzBe, это работает, Спасибо, что проявили интерес к вопросу.