Member 11337367 Ответов: 2

Как получить максимальную дату столбца вместе с соответствующими данными из нескольких столбцов


Мне нужно написать запрос для извлечения данных кода элемента и максимальной даты вместе с соответствующими значениями столбца, лежащими в этой строке.

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

любая помощь была бы очень кстати

результат запроса :
batch_No,bill_No,bill_Date,srno,item_Code
'GG','123','2019-08-19',39,'000365'
'AL','1217','2017-06-17',53,'000211'
'AL','123','2019-08-19',64,'000211'
'AL','12h55','2019-09-03',75,'000211'
'GG','1df4','2019-09-01',36,'000365'
'AL','123','2019-08-19',35,'000211'
'AL','123','2019-08-19',78,'000211'
'AL','123','2019-08-19',79,'000211'
'AL','123fz','2019-09-02',76,'000211'
'AL','123','2019-08-19',80,'000211'
'AL','123','2019-08-19',82,'000211'


теперь это может быть только два кода товара его просто smaple данные несколько раз он может содержать 5 или 10 itemcodes пожалуйста предложите рассмотреть этот момент

то, что я хочу от этого запроса, - это всего лишь одна строка, основанная на максимальной дате для itemcode
'GG','123','2019-08-19',39,'000365'

'AL','12h55','2019-09-03',75,'000211'


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

select purdet.c_batch_no batch_No,purmst.c_bill_no bill_No,max(purmst.d_bill_date) bill_Date,purmst.n_srno srno,purdet.c_item_code item_Code
from pur_mst purmst
join pur_det purdet on purdet.c_br_code=purmst.c_br_code and purdet.c_year=purmst.c_year
and purmst.c_prefix=purdet.c_prefix and purdet.n_srno=purmst.n_srno
where purdet.c_item_code + '/' + purdet.c_batch_no in('000211/AL','000365/GG')
group by purdet.c_batch_no,purmst.c_bill_no,purmst.n_srno,purdet.c_item_code

2 Ответов

Рейтинг:
4

Member 14588506

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


Выберите T.* FROM MM T WHERE DATE=
(Выбрать максимум(дата) из мм, где артикул=т.Артикул)


С уважением
- Аль-Нафиз


Рейтинг:
0

OriginalGriff

Группировка ПО работает не так, как вы думаете: каждый столбец, который вы добавляете в список групп по увеличивается количество строк, которые вы возвращаете, не уменьшает его.
Вы можете посмотреть здесь: SQL GROUP By и ошибка "имя столбца недопустимо в списке выбора, потому что..." [^] - это объясняет, как его использовать.
Вам нужно сделать два запроса: один для возврата максимальной даты для каждого пакета:

SELECT batch_no, MAX(bill_Date) FROM MyTable
GROUP BY Batch_no
Затем используйте JOIN, чтобы снова объединить эту информацию с вашей таблицей, чтобы получить именно те строки, которые вам нужны.

Кстати: если эти даты хранятся в виде строк, вам нужно это изменить: вы всегда должны хранить данные в соответствующих типах данных: дата в данном случае. Сравнение строк производится по символу за символом, и весь результат основан на первом обнаруженном различии - что работает при условии, что позже никто не добавит "01-02-2019" в вашу БД по ошибке ... сохранение их в виде даты, времени или времени ДАТЫ2 избавляет от этой проблемы.