#c# #mysql #sql
#c# #mysql #sql
Вопрос:
У меня есть таблица ниже:
UID productName productDate ...
1 productOne 10/1/2020
2 productOne 13/1/2020
3 productOne 14/1/2020
4 productTwo 10/1/2020
5 productTwo 18/1/2020
6 productFour 13/1/2020
7 productFive 11/1/2020
Я пытаюсь получить название продукта и дату первого ввода только для продуктов, которые поступили сегодня.
cmd = new MySqlCommand("SELECT j.productName, Min(j.productDate)"
" FROM (SELECT * FROM maintable ORDER BY productDate) as t "
" JOIN (SELECT * FROM maintable WHERE productDate=@currentDate) as j"
" ON j.productName = t.productName"
" group by productName", cnn);
Мне удалось получить ProductName и Min productDate для каждой записи в таблице, но я не могу отфильтровать ее для единственных продуктов, которые поступили сегодня.
Спасибо.
Комментарии:
1. Я думаю, что у меня получилось. Я поменял местами («SELECT j.ProductName, Min(j.productDate)» на: («SELECT t.ProductName, Min(t.productDate)»
2.
group by productName
должно вызывать ошибку «неоднозначное имя». ЗаменитеON j.productName = t.productName
наUSING (productName)
for, чтобы использовать имя столбца без псевдонима таблицы.
Ответ №1:
SELECT productName, MIN(productDate) min_productDate
FROM maintable
GROUP BY productName
HAVING MAX(productDate) = CURRENT_DATE
PS. Формат даты, показанный в примерах данных, неверен для MySQL, должно быть YYYY-MM-DD
.
Комментарии:
1. Идеальный. Формат даты был предназначен только для отображения и т. Д. Не могли бы вы, пожалуйста, объяснить запись min_productDate?
2. @michal Это псевдоним — имя, присвоенное этому выражению для ссылки в запросе (при необходимости) и в клиентском коде (вместо позиционной ссылки).