I am trying to pull back a row of detail based on the max date of one of the columns. Doing a simple max(date.field) does not work for my table. I originally solved the issue by utilizing this query that I built using this resource See the entry by Tom H.:
SELECT
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME AS CLIENT_NAME,
PART_BILL1.PART_CAT_CODE AS BILLING_CODE,
PART_BILL1.EMPL_UNO AS BILLING_NAME_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME AS BILLING_NAME,
PART_BILL1.PERCENTAGE AS BILLING_PERCENTAGE
FROM
HBM_CLIENT
INNER JOIN
HBM_NAME ON HBM_CLIENT.NAME_UNO = HBM_NAME.NAME_UNO
LEFT OUTER JOIN
TBM_CLMAT_PART AS PART_BILL1 ON PART_BILL1.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN
TBM_CLMAT_PART AS PART_BILL2 ON PART_BILL2.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL2.EFF_DATE > PART_BILL1.EFF_DATE
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN
HBM_PERSNL AS HBM_PERSNL_BILL ON PART_BILL1.EMPL_UNO = HBM_PERSNL_BILL.EMPL_UNO
GROUP BY
HBM_CLIENT.CLIENT_CODE, HBM_NAME.NAME,
PART_BILL1.PART_CAT_CODE, PART_BILL1.EMPL_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME,
PART_BILL1.PERCENTAGE,
ORDER BY
HBM_CLIENT.CLIENT_CODE
The problem with this query is that for some reason, it doesn't pull back all of the results, and the reason is because of the solution I used.
I'm wondering if using a case statement makes more sense, but I'm not very familiar with case statements.
Here is the query I'm working on:
`SELECT
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME AS CLIENT_NAME,
PART_BILL1.PART_CAT_CODE AS BILLING_CODE,
PART_BILL1.EMPL_UNO AS BILLING_NAME_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME AS BILLING_NAME,
PART_BILL1.PERCENTAGE AS BILLING_PERCENTAGE,
Part_BILL1.EFF_DATE,
CASE
WHEN
MAX(Part_BILL1.EFF_DATE) > Part_BILL1.EFF_DATE THEN max(Part_BILL1.EFF_DATE) ELSE Part_BILL1.EFF_DATE END
FROM HBM_CLIENT
INNER JOIN HBM_MATTER
ON HBM_CLIENT.CLIENT_UNO = HBM_MATTER.CLIENT_UNO
INNER JOIN HBM_NAME
ON HBM_CLIENT.NAME_UNO = HBM_NAME.NAME_UNO
LEFT OUTER JOIN TBM_CLMAT_PART AS PART_BILL1
ON PART_BILL1.CLIENT_UNO = HBM_CLIENT.CLIENT_UNO
AND PART_BILL1.PART_CAT_CODE = 'BILL'
LEFT OUTER JOIN HBM_PERSNL AS HBM_PERSNL_BILL
ON PART_BILL1.EMPL_UNO = HBM_PERSNL_BILL.EMPL_UNO
WHERE
(HBM_CLIENT.CLIENT_CODE = '065011')
GROUP BY
HBM_CLIENT.CLIENT_CODE,
HBM_NAME.NAME,
PART_BILL1.PART_CAT_CODE,
PART_BILL1.EMPL_UNO,
HBM_PERSNL_BILL.EMPLOYEE_NAME,
PART_BILL1.PERCENTAGE,
Part_BILL1.EFF_DATE
HAVING
(Part_BILL1.EFF_DATE = CASE
WHEN MAX(Part_BILL1.EFF_DATE) > Part_BILL1.EFF_DATE THEN max(Part_BILL1.EFF_DATE) ELSE Part_BILL1.EFF_DATE END)`
It runs, but it gives me back two rows instead of one, i.e. it's not pulling just the max. I'm using T-SQL and working out of Visual Studio to write SSRS.
I'm happy to answer any questions I can. I apologize in advance if my explanations aren't very good.
| CLIENT_CODE | CLIENT_NAME | BILLING_NAME | EFF_DATE | PERCENTAGE |
| ------------+--------------+--------------+----------+------------|
| 123456 | Entity, Inc. | Attorney A | 1/1/1990 |50% |
| 123456 | Entity, Inc. | Attorney B | 1/1/1990 |50% |
| 123456 | Entity, Inc. | Attorney B | 1/1/2017 |50% |
| 123456 | Entity, Inc. | Attorney C | 1/1/2017 |50% |