每个客户ID的SQL Server最小和最大日期

时间:2018-09-18 09:57:56

标签: sql sql-server

我正在尝试编写查询以显示为客户开设的每个帐户的最早和最晚日期(最大(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>

1 个答案:

答案 0 :(得分:1)

首先,几乎不要将SELECT DISTINCTGROUP 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(*)或类似的内容。