如何返回过去 90 天内没有活动日期的记录?
Posted
技术标签:
【中文标题】如何返回过去 90 天内没有活动日期的记录?【英文标题】:How to return records with no activity date in the last 90 days? 【发布时间】:2020-09-25 18:09:42 【问题描述】:我有一个查询要返回过去 90 天内没有活动的所有记录,但它似乎也返回了过去 90 天内活动的记录。我该如何解决这个问题?
我检查它们是否处于活动状态的逻辑 - tm.timeslip_date <= DATEADD(day, -90, GETDATE())
我认为如果它们在过去 90 天内不活动,这会做任何事情。这可能很容易解决,但我现在很难过。
WITH unit AS (
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()) -- This where I check last 90 days no timeslip dates**
WHERE cases.closed_ind = 'O'
), agg AS (
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]
)
SELECT agg.*, unit.detail_notes
FROM agg
INNER JOIN unit
ON agg.[Last Bill Date] = unit.[timeslip_date]
AND 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.atty1_sk = unit.atty1_sk
WHERE agg.case_sk ='66505'
ORDER BY agg.[Created Date] ASC
所以下面这个案例不应该拉,因为它在过去 90 天内有活动
【问题讨论】:
AND tm.timeslip_date <= DATEADD(day, -90, GETDATE())
-- “这是我检查过去 90 天的地方,没有时间间隔日期” -- 不,你没有检查。这是LEFT JOIN
中的谓词,因此它不会删除行;它只是不加入他们。如果要过滤掉行,则需要将条件放在WHERE
子句中,而不是ON
子句中。
请在代码问题中给出minimal reproducible example--cut & paste & runnable code,包括最小的代表性示例输入为代码;期望和实际输出(包括逐字错误消息);标签和版本;明确的规范和解释。给出尽可能少的代码,即您显示的代码可以通过您显示的代码扩展为不正常的代码。 (调试基础。)对于包含 DBMS 和 DDL(包括约束和索引)和输入为格式化为表的代码的 SQL。 How to Ask 暂停总体目标的工作,将代码砍到第一个表达式,没有给出你期望的内容,说出你的期望和原因。
请use text, not images/links, for text--including tables & ERDs。仅将图像用于无法表达为文本或增强文本的内容。在图片中包含图例/键和说明。
@TheImpaler,谢谢你的信息
@philipxy 谢谢你的信息。下次我会关注这些。
【参考方案1】:
...............
LEFT JOIN dbo.timeslips tm
ON cases.case_sk = tm.case_sk
--AND tm.timeslip_date <= DATEADD(day, -90, GETDATE()) -- This where I check last 90 days no timeslip dates**
WHERE cases.closed_ind = 'O'
AND NOT EXISTS(SELECT * FROM dbo.timeslips tsm WHERE tsm.case_sk = cases.case_sk AND tsm.timeslip_date > DATEADD(day, -90, GETDATE()) )
.........................
【讨论】:
非常感谢。我占用了你的帮助。它有效。以上是关于如何返回过去 90 天内没有活动日期的记录?的主要内容,如果未能解决你的问题,请参考以下文章
MySql 我如何返回过去 60 天和不在 60 天内的多个特定 ID?