我想写一个sql查询的表,这将给我的结果类似于下面的链接中的Formula_Based表[请参阅sample.xlsx中的Formula_Based表:]:MSAccess SQL查询查找最近的日期> 180过去
我已成功地编写查询是:
SELECT x.[CTY], x.[CAT], x.[OWN], x.[BRD], x.[EXT], x.[appeared date], y.[appeared date], x.[ATTR], y.[ATTR]
FROM TEMP AS x
LEFT JOIN
(
SELECT [CTY], [CAT], [OWN], [BRD], [EXT], [appeared date], MIN([appeared date]),[ATTR]
FROM TEMP
GROUP BY [CTY], [CAT], [OWN], [BRD], [EXT], [appeared date],[ATTR]
) AS y
ON
(
x.[CAT]=y.[CAT]
AND x.[CTY]=y.[CTY]
AND x.[OWN]=y.[OWN]
AND x.[BRD]=y.[BRD]
AND x.[EXT]=y.[EXT]
AND x.[appeared date] > y.[appeared date]
AND x.[appeared date] - y.[appeared date]>180
)
GROUP BY x.[CTY], x.[CAT], x.[OWN], x.[BRD], x.[EXT], x.[appeared date],y.[appeared date],x.[ATTR],y.[ATTR]
HAVING y.[ATTR]="NEW"
数据有更多的列,但我已经证明只有最需要的列。数据按以下列顺序排序,即。 CTY,CAT,OWN,BRD,EXT,APPEARED DATE。我试图找到的是相同的产品(具有相同的CTY,CAT,OWN,BRD,EXT,APPEARED DATE)是否在过去推出了180次或更多。所以我需要一个Previous Date列(> 180列),它会显示ATTR ='NEW'过去的最早日期> 180。
我已经做了一个左连接,以获取表中的所有行(32行,但只获得25)。在无法确定先前日期的情况下,我无法添加NULL。 [请参见Sample.xlsx中的Query_Based表单)。
如何向y。[出现日期]列(即上一个日期列)添加空格或NULL?有没有更好的和有效的方式来写这个查询?
P.S:我在MSAccess中运行查询。
从技术上讲,这个问题不应该说“(具有相同的CTY,CAT,OWN,BRD,EXT,出现DATE)推出180以上...“,因为不可能有相同的APPEARED日期,并在不同的时间启动。它应该说“(具有相同的CTY,CAT,OWN,BRD,EXT)发射180或更多......” –
该文本说“启动180或更多”,这意味着> = 180而不是> 180。否则它应该说“推出超过180”。那它是哪一个?顺便说一句,也许“天”是隐含的,但正如我所教,并一直传递给我的学生 - 总是包括单位。 :) –