Выбор минимальной даты MySQL с группировкой

#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 Это псевдоним — имя, присвоенное этому выражению для ссылки в запросе (при необходимости) и в клиентском коде (вместо позиционной ссылки).