Select C.min_price, C.day
From compress As C
Where C.item_name = '$item'
And Exists (
Select 1
From compress As C2
Where C2.item_name = C.item_name
And Extract(Month From C2.day) = Extract(Month From C.day)
And Extract(Year From C2.day) = Extract(Year From C.day)
Group By Extract(Month From C2.day), Extract(Year From C2.day)
Having C.min_price = Min(C2.min_price)
)
AJOUT
MySQL est mieux avec joint alors voici une variante de la même requête
Select C.min_price, C.day
From compress As C
Join (
Select C2.item_name
, Extract(Month From C2.day) As ItemMonth
, Extract(Year From C2.day) As ItemYear
, Min(C2.min_price) As MinPrice
From compress As C2
Group By C2.item_num, Extract(Month From C2.day), Extract(Year From C2.day)
) As Z
On Z.item_name = C.item_name
And Z.ItemMonth = Extract(Month From C.day)
And Z.ItemYear = Extract(Year From C.day)
And Z.MinPrice = C.min_price
Where C.item_name = '$item'
Ce qui est vraiment ralentit toute variation est l'appel de l'extrait sur chaque ligne. Si vous aviez une table de calendrier contenant une ligne pour chaque date et une colonne pour le mois et l'année de la date et de votre table de calendrier a couvert les plages de dates dans vos données, vous pouvez faire quelque chose comme:
Select C.min_price, C.day
From compress As C
Join Calendar As Cal
On Cal.Date = C.Day
Join (
Select C3.item_name
, Cal3.Month, Cal3.Year
, Min(C3.min_price) As MinPrice
From compress As C3
Join Calendar As Cal3
On Cal3.Date = C3.day
Group By C3.item_num, Cal3.Month, Cal3.Year
) As Z
On Z.item_name = C.Item_name
An Z.Month = Cal.Month
And Z.Year = Cal.Year
And Z.MinPrice = C.min_price
Where C.item_name = '$item'
Hmmm ... Ca a l'air de bien fonctionner, même si c'est incroyablement lent ... Je devrais peut-être trouver une autre alternative ... Merci, cependant. – Yoshiyahu
Question rapide ... Serait-il possible de spécifier seulement certains noms d'éléments avec cette requête? – Yoshiyahu
@Yoshiyahu - J'ai fourni quelques variantes qui pourraient être plus rapides qu'une sous-requête. Dans les trois variantes, j'ai fourni pour passer une valeur $ item dans la requête. – Thomas