У меня есть некоторые данные, подобные следующим:
--------------------------------------------------
Location Weight MarkedOldest plantId Date
--------------------------------------------------
101010 520 0 2 3/10/2019
105000 500 1 2 3/1/2019
105000 500 0 2 2/20/2019
И требование иметь возможность переопределить самую старую строку в этой таблице.Я ввел здесь столбец MarkedOldest, чтобы сохранить фактическую дату создания строки.На первый взгляд вы видите, что последняя строка в таблице является самой старой, но, скажем, пользователь хочет установить вторую строку как самую старую.Нет проблем.
Моя проблема возникает, когда я возвращаю список этих строк с требованиями представить суммарный вес в каждом местоположении, причем самое старое местоположение представляется первым. Идеальный результат для запроса, подобного этому, будет возвращать это:
105000 1000lbs (3/1 and 2/20)
101010 520lbs 3/10
Я написал следующий запрос, который был близок:
select z.Location, Sum(z.Weight), as Weight, z.Date
FROM
(select Location, Weight, MarkedOldest
from dbo.SomeTable WHERE MarkedOldest = 1 PlantId= 2
UNION
select Location, Weight, MarkedOldest
from dbo.SomeTable WHERE PlantId = 2) as z
Group by z.Location, z.MarkedOldest
Order By z.MarkedOldest desc
Этот запрос производитследующий вывод:
105000 500lbs 3/1/2019
105000 500lbs 2/20/2019
101010 520lbs 3/10/2019
Идея состояла в том, чтобы сначала выбрать любые старые строки, введенные вручную, и объединить их с оставшимися строками в старшем первом порядке.Приведенный выше вывод является почти правильным, но я хотел бы объединить / удалить дублирующиеся местоположения в верхних двух строках.Однако я не думаю, что смогу сделать это, потому что я группирую по столбцам 'MarkedOldest' и 'Date'
Есть ли другой способ решить этот запрос, чтобы получить ожидаемый результат?Я сталкивался с множеством ошибок groupBy / aggregate при попытке таких вещей, как удаление некоторых столбцов groupby или orderby.