我如何获得最新的 tm.detail_notes(tm.detail_notes for max(tm.timeslip_date))?
How do I get the lates tm.detail_notes ( tm.detail_notes for max(tm.timeslip_date))?
我有一个 return 一些记录的查询,但我需要获取 max(tm.timeslip_date)
上的最新 tm.detail_notes
。现在我收到一个错误。 (我在 table 上有多个记录日期并且每天都有注释)
查询
SELECT
min(tm.create_date) 'Created Date'
, max(tm.timeslip_date) 'Last Bill Date'
, cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name 'Business Leader'
, em.smtp_reply_to 'Business Leader Email'
, cases.atty1_sk
, vc.atty1_name 'Assign Attorney'
, tm.detail_notes
FROM dbo.cases
LEFT JOIN dbo.vcases vc ON cases.case_sk = vc.case_sk
LEFT JOIN dbo.employee em ON cases.atty2_sk = em.employee_sk
LEFT JOIN dbo.timeslips tm ON cases.case_sk = tm.case_sk
WHERE
cases.case_number = '0130751-KMG'
AND tm.timeslip_date <= DATEADD(day, -90, GETDATE())
AND cases.closed_ind = 'O'
GROUP BY
cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name
, em.smtp_reply_to
, cases.atty1_sk
, vc.atty1_name
, tm.detail_notes
错误
文本、下一个和图像数据类型无法进行比较或排序,除非使用 IS NULL 或 LIKE 运算符。
我将非常感谢对此的任何帮助。最后,任何人都可以证实我的逻辑,我正在尝试获取过去 90 天内没有 tm.timeslip_date
的案例。按照tm.timeslip_date <= DATEADD(day, -90, GETDATE())
这个逻辑应该能搞定吧。
非常感谢
不知道更多 tm.detail_notes
似乎是一个 text
列,它是大型 open-ended 数据类型的特殊列之一。请参阅 ntext, text, and image (Transact-SQL). These fields cannot be used in columns expressions 的聚合查询 GROUP BY
。
要将 text
字段合并到聚合中,请考虑使用两个相关的 CTE 进行单元级别和聚合级别的联接。然后,最终查询会将文本列绑定到在 Last Bill Date
.
处连接的聚合
WITH unit AS (
-- NO AGGREGATIONS
SELECT
tm.create_date
, tm.timeslip_date
, cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name AS [Business Leader]
, em.smtp_reply_to AS [Business Leader Email]
, cases.atty1_sk
, vc.atty1_name AS [Assign Attorney]
, tm.detail_notes
FROM dbo.cases
LEFT JOIN dbo.vcases vc ON cases.case_sk = vc.case_sk
LEFT JOIN dbo.employee em ON cases.atty2_sk = em.employee_sk
LEFT JOIN dbo.timeslips tm
ON cases.case_sk = tm.case_sk
AND tm.timeslip_date <= DATEADD(day, -90, GETDATE()) -- MOVED FROM WHERE TO ON CLAUSE
WHERE cases.case_number = '0130751-KMG'
AND cases.closed_ind = 'O'
), agg AS (
-- NO JOINS / WHERE
SELECT
MIN(u.create_date) AS [Created Date]
, MAX(u.timeslip_date) AS [Last Bill Date]
, u.case_sk
, u.case_number
, u.closed_ind
, u.atty2_sk
, u.[Business Leader]
, u.[Business Leader Email]
, u.atty1_sk
, u.[Assign Attorney]
FROM unit u
GROUP BY
u.case_sk
, u.case_number
, u.closed_ind
, u.atty2_sk
, u.[Business Leader]
, u.[Business Leader Email]
, u.atty1_sk
, u.[Assign Attorney]
)
-- FINAL QUERY JOINING ON GROUP COLUMNS AND AGG DATES
SELECT agg.*, unit.detail_notes
FROM agg
INNER JOIN unit
ON agg.case_sk = unit.case_sk
AND agg.case_number = unit.case_number
AND agg.closed_ind = unit.closed_ind
AND agg.atty2_sk = unit.atty2_sk
AND agg.[Business Leader] = unit.[Business Leader]
AND agg.[Business Leader Email] = unit.[Business Leader Email]
AND agg.atty1_sk = unit.atty1_sk
AND agg.[Assign Attorney] = unit.[Assign Attorney]
AND agg.[Created Date] = unit.[create_date]
AND agg.[Last Bill Date] = unit.[timeslip_date]
我有一个 return 一些记录的查询,但我需要获取 max(tm.timeslip_date)
上的最新 tm.detail_notes
。现在我收到一个错误。 (我在 table 上有多个记录日期并且每天都有注释)
查询
SELECT
min(tm.create_date) 'Created Date'
, max(tm.timeslip_date) 'Last Bill Date'
, cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name 'Business Leader'
, em.smtp_reply_to 'Business Leader Email'
, cases.atty1_sk
, vc.atty1_name 'Assign Attorney'
, tm.detail_notes
FROM dbo.cases
LEFT JOIN dbo.vcases vc ON cases.case_sk = vc.case_sk
LEFT JOIN dbo.employee em ON cases.atty2_sk = em.employee_sk
LEFT JOIN dbo.timeslips tm ON cases.case_sk = tm.case_sk
WHERE
cases.case_number = '0130751-KMG'
AND tm.timeslip_date <= DATEADD(day, -90, GETDATE())
AND cases.closed_ind = 'O'
GROUP BY
cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name
, em.smtp_reply_to
, cases.atty1_sk
, vc.atty1_name
, tm.detail_notes
错误
文本、下一个和图像数据类型无法进行比较或排序,除非使用 IS NULL 或 LIKE 运算符。
我将非常感谢对此的任何帮助。最后,任何人都可以证实我的逻辑,我正在尝试获取过去 90 天内没有 tm.timeslip_date
的案例。按照tm.timeslip_date <= DATEADD(day, -90, GETDATE())
这个逻辑应该能搞定吧。
非常感谢
不知道更多 tm.detail_notes
似乎是一个 text
列,它是大型 open-ended 数据类型的特殊列之一。请参阅 ntext, text, and image (Transact-SQL). These fields cannot be used in columns expressions 的聚合查询 GROUP BY
。
要将 text
字段合并到聚合中,请考虑使用两个相关的 CTE 进行单元级别和聚合级别的联接。然后,最终查询会将文本列绑定到在 Last Bill Date
.
WITH unit AS (
-- NO AGGREGATIONS
SELECT
tm.create_date
, tm.timeslip_date
, cases.case_sk
, cases.case_number
, cases.closed_ind
, cases.atty2_sk
, vc.atty2_name AS [Business Leader]
, em.smtp_reply_to AS [Business Leader Email]
, cases.atty1_sk
, vc.atty1_name AS [Assign Attorney]
, tm.detail_notes
FROM dbo.cases
LEFT JOIN dbo.vcases vc ON cases.case_sk = vc.case_sk
LEFT JOIN dbo.employee em ON cases.atty2_sk = em.employee_sk
LEFT JOIN dbo.timeslips tm
ON cases.case_sk = tm.case_sk
AND tm.timeslip_date <= DATEADD(day, -90, GETDATE()) -- MOVED FROM WHERE TO ON CLAUSE
WHERE cases.case_number = '0130751-KMG'
AND cases.closed_ind = 'O'
), agg AS (
-- NO JOINS / WHERE
SELECT
MIN(u.create_date) AS [Created Date]
, MAX(u.timeslip_date) AS [Last Bill Date]
, u.case_sk
, u.case_number
, u.closed_ind
, u.atty2_sk
, u.[Business Leader]
, u.[Business Leader Email]
, u.atty1_sk
, u.[Assign Attorney]
FROM unit u
GROUP BY
u.case_sk
, u.case_number
, u.closed_ind
, u.atty2_sk
, u.[Business Leader]
, u.[Business Leader Email]
, u.atty1_sk
, u.[Assign Attorney]
)
-- FINAL QUERY JOINING ON GROUP COLUMNS AND AGG DATES
SELECT agg.*, unit.detail_notes
FROM agg
INNER JOIN unit
ON agg.case_sk = unit.case_sk
AND agg.case_number = unit.case_number
AND agg.closed_ind = unit.closed_ind
AND agg.atty2_sk = unit.atty2_sk
AND agg.[Business Leader] = unit.[Business Leader]
AND agg.[Business Leader Email] = unit.[Business Leader Email]
AND agg.atty1_sk = unit.atty1_sk
AND agg.[Assign Attorney] = unit.[Assign Attorney]
AND agg.[Created Date] = unit.[create_date]
AND agg.[Last Bill Date] = unit.[timeslip_date]