Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 select max not working

Author  Topic 

divan
Posting Yak Master

153 Posts

Posted - 2012-09-07 : 11:11:59
I have the following script

DROP TABLE #TEMP1
SELECT DISTINCT E.DATE_5, E.POLICY_NUMBER, E.NAME_AND_ADDRESS,
CASE WHEN E.SHORT_CODE_1 = 3 THEN '' ELSE M.EXP_PREM END AS PREMIUM

INTO #TEMP1
FROM ENDORSEMENT E
INNER JOIN POLICY P ON E.POLICY_NUMBER = P.POLICY_NUMBER AND E.POLICY_DATE_TIME = P.POLICY_DATE_TIME
INNER JOIN MPL_EXPOSURE M ON E.POLICY_NUMBER = M.POLICY_NUMBER AND E.NAME_AND_ADDRESS = M.CLIENT_NUMBER AND E.POLICY_DATE_TIME =M.POLICY_DATE_TIME
WHERE E.IDENTIFIER = '01Y'
AND E.POLICY_NUMBER NOT LIKE 'Q%'
AND E.DATE_5 BETWEEN '1/1/12' AND '7/31/12'
AND M.RATING_COUNTY NOT LIKE 'X%'
----AND E.DATE_5 = (SELECT MAX(DATE_5) FROM ENDORSEMENT E2 WHERE E.POLICY_NUMBER = E2.POLICY_NUMBER AND E.NAME_AND_ADDRESS = E2.NAME_AND_ADDRESS)
AND E.DATE_5 = (SELECT MAX(DATE_5)FROM ENDORSEMENT E2 WHERE E.POLICY_NUMBER = E2.POLICY_NUMBER AND E.POLICY_DATE_TIME = E2.POLICY_DATE_TIME)

SELECT * FROM #TEMP1 ORDER BY NAME_AND_ADDRESS, POLICY_NUMBER

I was expecting to see just one record per NAME_AND_ADDRESS since I used the SELECT MAX command. but then I get the following result (please note I have not posted the complete result)

2012-06-01 00:00:00.000 CT 11240 270 0
2012-01-11 00:00:00.000 CT 10715 959 0
2012-06-01 00:00:00.000 CT 11240 988 0
2012-06-01 00:00:00.000 CT 11240 1021 0
2012-06-01 00:00:00.000 CT 11240 1027 0
2012-06-01 00:00:00.000 CT 11240 1040 0
2012-06-01 00:00:00.000 CT 11240 1067 0
2012-02-01 00:00:00.000 CT 11727 1084 0
2012-04-15 00:00:00.000 CT 11727 1084 6803
2012-06-01 00:00:00.000 CT 11240 1094 0
2012-06-01 00:00:00.000 CT 11240 1131 0
2012-06-01 00:00:00.000 CT 11240 1133 0
2012-06-01 00:00:00.000 CT 11240 1164 0
2012-06-01 00:00:00.000 CT 11240 1172 0
2012-04-01 00:00:00.000 CT 11240 1180 0
2012-06-01 00:00:00.000 CT 11240 1217 0
2012-01-23 00:00:00.000 NM 10093 1247 16091
2012-01-01 00:00:00.000 NM 10093 1247 0

you will notice that NAME_AND_ADDRESS 1084 AND 1247 have two records.. Any idea why the select max not working on these records??

sunitabeck
Master Smack Fu Yak Hacker

5155 Posts

Posted - 2012-09-07 : 12:27:28
It could be because for the same DATE_5 value, there is more than one row returned in the outer query. Even the distinct clause that you have for the outer query would not eliminate them unless those rows happened to have identical.

In the two examples you described, distinct clause is not able to eliminate the dups because they are not really dups - the PREMIUM for 1084 has two values, 0 and 6803.
Go to Top of Page

visakh16
Very Important crosS Applying yaK Herder

52326 Posts

Posted - 2012-09-08 : 17:04:21
you might be better off using logic like below


DROP TABLE #TEMP1
SELECT ROW_NUMBER() OVER (PARTITION BY NAME_AND_ADDRESS ORDER BY DATE_5 DESC) AS Seq,E.DATE_5, E.POLICY_NUMBER, E.NAME_AND_ADDRESS,
CASE WHEN E.SHORT_CODE_1 = 3 THEN '' ELSE M.EXP_PREM END AS PREMIUM

INTO #TEMP1
FROM ENDORSEMENT E
INNER JOIN POLICY P ON E.POLICY_NUMBER = P.POLICY_NUMBER AND E.POLICY_DATE_TIME = P.POLICY_DATE_TIME
INNER JOIN MPL_EXPOSURE M ON E.POLICY_NUMBER = M.POLICY_NUMBER AND E.NAME_AND_ADDRESS = M.CLIENT_NUMBER AND E.POLICY_DATE_TIME =M.POLICY_DATE_TIME
WHERE E.IDENTIFIER = '01Y'
AND E.POLICY_NUMBER NOT LIKE 'Q%'
AND E.DATE_5 BETWEEN '1/1/12' AND '7/31/12'
AND M.RATING_COUNTY NOT LIKE 'X%'
----AND E.DATE_5 = (SELECT MAX(DATE_5) FROM ENDORSEMENT E2 WHERE E.POLICY_NUMBER = E2.POLICY_NUMBER AND E.NAME_AND_ADDRESS = E2.NAME_AND_ADDRESS)
AND E.DATE_5 = (SELECT MAX(DATE_5)FROM ENDORSEMENT E2 WHERE E.POLICY_NUMBER = E2.POLICY_NUMBER AND E.POLICY_DATE_TIME = E2.POLICY_DATE_TIME)

SELECT * FROM #TEMP1 WHERE Seq=1 ORDER BY NAME_AND_ADDRESS, POLICY_NUMBER


------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/

Go to Top of Page
   

- Advertisement -