我正在尝试编写查询以显示为客户开设的每个帐户的最早和最晚日期(最大(FROMDATE)和最小(FROMDATE)),即某个客户在特定日期存在的帐户数我似乎在最小日期和最大日期上都得到了相同的值。
请参见下面的代码;这些是出于问题目的的表名。
<SELECT DISTINCT
c.COLUMNNAME
,a.COLUMNNAME
,CASE
WHEN d.product IN ('1','2','3','4','5','6')
THEN 'Products'
ELSE 'Other'
END AS PRODUCT_GROUP
,c.FROMDATE
,min(cast(c.FROMDATE as date)) AS MIN_DAT
,max(cast(c.FROMDATE as date)) AS MAX_DAT
FROM tablename a
left outer JOIN tablename b ON a.id = b.Id AND b.date = '9999-12-31'
left outer JOIN tablename c ON a.number = c.number
left outer JOIN tablenameT d ON d.code = c.code
WHERE c.FROMDATE between '20180601'and '20180830' and a.DATE ='99991231'
group by
c.COLUMNNAME
,a.COLUMNNAME
,CASE
WHEN d.product IN ('1','2','3','4','5','6')
THEN 'Products'
ELSE 'Other'
END
,c.FROMDATE>
答案 0 :(得分:1)
首先,几乎不要将SELECT DISTINCT
与GROUP BY
一起使用。这很可疑。
第二,在MIN(FROMDATE)
列表中有MAX(FROMDATE)
和SELECT
,但是在FROMDATE
中也有GROUP BY
。这可能是您的主要问题。
SELECT c.COLUMNNAME, a.COLUMNNAME,
(CASE WHEN d.product IN ('1', '2', '3', '4', '5', '6') -- do not use single quotes if these are numbers
THEN 'Products'
ELSE 'Other'
END) AS PRODUCT_GROUP,
MIN(CAST(c.FROMDATE as date)) AS MIN_DAT,
MIN(CAST(c.FROMDATE as date)) AS MAX_DAT
FROM tablename a LEFT JOIN
tablename b
ON a.id = b.Id AND b.date = '9999-12-31' LEFT JOIN
tablename c
ON a.number = c.number LEFT JOIN
tablenameT d
ON d.code = c.code
WHERE c.FROMDATE between '20180601' and '20180830' and
a.DATE = '99991231'
GROUP BY c.COLUMNNAME, a.COLUMNNAME,
(CASE WHEN d.product IN ('1', '2', '3', '4', '5', '6') -- do not use single quotes if these are numbers
THEN 'Products'
ELSE 'Other'
END);
如果您还想要个帐户数,那么我希望在查询中使用COUNT(*)
或类似的内容。