Я пытаюсь оттянуть ряд деталей в зависимости от максимальной даты одного из столбцов. Выполнение простого max (date.field) не работает для моей таблицы. Изначально я решил эту проблему, используя этот запрос, который я построил, используя этот ресурс See the entry by Tom H.:Max Date/Case Statement
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
Проблемы с этим запросом является то, что по какой-то причине, он не тянет назад все результаты, и причина в том, из-за решения, которое я использовал.
Мне интересно, имеет ли смысл использовать аргумент case, но я не очень хорошо разбираюсь в операторах case.
Вот запрос, я работаю над:
`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)`
Он работает, но это дает мне обратно две строки вместо одной, то это не тянет только макс. Я использую T-SQL и разработку Visual Studio для записи SSRS.
Я рад ответить на любые вопросы, которые я могу. Я заранее извиняюсь, если мои объяснения не очень хорошие.
| 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% |
В ссылке, которую вы указали, у вас был конкретный вопрос с данными. Вы даете тонну столов, не зная, что в них. Есть ли способ предоставить более упрощенную версию тестовых данных? Трудно помочь с такими подробными подробностями, не видя базовых данных. – djangojazz
@djangojazz это достаточно разумно! Я удалил лишние вещи, так что это в основном то же самое. Теперь отображаются только те таблицы, которые необходимы для запуска запросов с выбранными мной полями. –