此查询试图获取每个s1ppmp
(大小),每个s1ilie
(参考)和s1iref
(最后一个)的s1ydat
(产品价格)日期),因为一种产品在不同的日期(例如,黑色星期五或其他日期的正常价格)可能具有多个价格。
anmoisjour
来自日历表,但是CALENDER表和主表msk100
之间没有连接,所以...我不了解此查询的逻辑... >
SELECT s1isoc,
s1ilie,
s1iref,
s1ydat,
anmoisjour,
s1ppmp
FROM msk110
INNER JOIN (SELECT s1isoc AS isoc,
s1ilie AS ilie,
s1iref AS iref,
MAX(s1ydat) AS ydat,
anmoisjour
FROM calendrier,
msk110
WHERE s1ydat <= anmoisjour
AND anmoisjour BETWEEN 20100101 AND 20302131
GROUP BY s1isoc,
s1ilie,
s1iref,
anmoisjour) a ON s1isoc = isoc
AND s1ilie = ilie
AND s1iref = iref
AND s1ydat = ydat
WHERE s1isoc = 1
AND anmoisjour BETWEEN 20100101 AND 20302131
ORDER BY anmoisjour,
s1ydat;
s1isoc,s1ilie,s1iref,s1ydat和s1ppmp来自msk110 和 anmoisjour属于日历表,它是日期表。
答案 0 :(得分:2)
我相信混淆是日历表连接的方式。
如果anmoisjour
是日历表的天列,并且该表每天保留1行,则WHERE
过滤器anmoisjour BETWEEN 20100101 AND 20302131
使calendrier
每天保留一行为期20年(2010年至2030年)。
它们将产品价格表msk100
链接到日历calendrier
表的方式不是直接按日期,而是带有最大日期(msk100.s1ydat <= calendrier.anmoisjour
)。这意味着,例如msk100.s1ydat
的日期2015-01-01
将与日历表{strong> 2015-01-01
。
2030-12-31
以日历表的日期(GROUP BY
表示),这意味着如果特定产品,尺寸和价格在不同的日期重复,则可以说唯一的出现在日期{{1} },calendrier.anmoisjour
和2015-01-01
,则分组依据的结果如下(按日历日期排序,甚至显示2017-01-01
进行演示)
2020-01-01
查询所显示的是产品表 的内容,以及该特定产品具有该特定价格的最后日期 ,该日期也超过20年NULL
的位置(我不知道那是什么意思)。