【发布时间】:2010-10-08 02:04:00
【问题描述】:
我需要做一个相当复杂的查询,我需要帮助。下面是我做的一个例子。
基本上,我需要一个查询,该查询将为每个 case_id 返回一行,其中类型为 support、状态为 start 和日期含义第一个创建的(因此在下面的示例中,只有 2009 年 2 月 1 日约翰的案例被退回,而不是 2009 年 3 月 1 日)。搜索需要是动态的,以便能够从包含数千行的表中返回所有具有不同 case_id 等的相似行。
在那之后还有更多,但我还不知道所有细节,如果你们(女孩)可以在这里帮助我,我想我可以弄清楚。 :)
身份证 |案例_ID |姓名 |日期 |状态 |类型 48 | 450 |约翰 | 2009 年 6 月 1 日 |固定 |支持 47 | 450 |约翰 | 2009 年 4 月 1 日 |搬家 |支持 46 |第451章莎拉 | 2009 年 3 月 1 日 | | 45 |第432章约翰 | 2009 年 3 月 1 日 |固定 |危急 44 | 450 |约翰 | 2009 年 3 月 1 日 |开始 |支持 42 | 450 |约翰 | 2009 年 2 月 1 日 |开始 |支持 41 | 440 |本 | 2009 年 2 月 1 日 | | 40 |第432章约翰 | 2009 年 1 月 1 日 |开始 |危急 ...非常感谢!
编辑:
为了回答一些人的问题,我使用的是 SQL Server 2005。日期只是普通日期,而不是字符串。
好的,现在我进一步解决了这个问题。我最终得到了 Bliek 的解决方案,它就像一个魅力。但是现在我遇到了有时状态永远不会启动的问题,因为它立即解决了。我也需要将其包括在内。但仅限于特定时间段。
我想我将不得不在这里检查 FK Case_ID 引用的案例表。因此,我需要一种方法来检查过去一个月内在 CaseTable 中创建的每个 Case_ID,然后在同一个表中以与上面发布的相同方式对这些进行搜索,只返回第一个结果。我怎样才能像那样使用另一个表?
像往常一样,我会在等待中自己寻找答案,再次感谢!
编辑 2:
似乎这就是答案。我还没有访问完整的数据库,所以我不能完全测试它,但它似乎正在使用我创建的虚拟表,从 Bliek 的代码的 WHERE 子句继续:
WHERE RowNumber = 1 AND Case_ID IN (SELECT Case_ID FROM CaseTable 地点(日期在“2007/11/1”和“2007/11/30”之间))日期又搞砸了,但我确定你明白了。感谢大家的帮助!如果还有更多问题,我会回来的,但我认为有了这些信息,我可以即兴解决我目前必须处理的大多数 SQL 问题。 :)
【问题讨论】:
-
什么数据库?在某些方面比在其他方面更容易。
-
日期是什么类型?我认为“相当复杂”的方面是因为它是字符串而不是日期? (如果是正常的日期/时间,这只是一个简单的“分组依据”。)
-
@Stephen Darlington:不是。他感兴趣的是每组最早的记录,而不是单个值的 MIN()。
-
@Tauron Xavenberg:“立即关闭”案件的特点是什么?状态为空?状态正在“完成”且没有其他先前条目?
-
@Tomalak:除了从 Case_ID 引用的表中检查创建日期之外,基本上没有其他方法可以知道。状态可以是任何东西,看起来。但是 Case_ID 是在处理新案例时首先创建的,所以这是关键。