SQL查询示例
我的表看起来像这样的顺序..我想用这些条件计算TermID的;如果有可能也想要得到的结果集与这些头
- TermID必须关闭或开启状态
- TermID状态必须转向开(关开)
- 状态日期(打开状态)必须大于大约会关闭状态日期
SQL查询示例
与我的问候,
ID TermID Status Date 103990107 103641 Close 28/05/2010 104000600 103641 Open 31/05/2010 103980976 106458 Close 26/05/2010 103990045 106458 Open 27/05/2010 103939537 106475 Open 18/05/2010 103908130 117220 Open 13/05/2010 103929653 117220 Open 13/05/2010 103999017 117360 Open 31/05/2010 103834814 117402 Open 05/05/2010 103993973 117420 Open 28/05/2010 103849795 119377 Close 05/05/2010 103955266 119377 Close 21/05/2010 103995229 119377 Close 29/05/2010 103979873 119704 Open 25/05/2010 103832225 119767 Open 04/05/2010 103925429 123229 Close 15/05/2010 103986986 123932 Open 27/05/2010
我觉得你问两个问题在这里:
1.如何计算所有TermID?
答案:您可以使用SQL中的count(...)
聚合函数。
例子:
SELECT count(TermID) from <table>
这将算表中的所有TermIDs。
2.如何更新我的记录有一个新的状态/状态日期?
答:使用UPDATE语句:
UPDATE <table>
SET Status = 'Open', <column name> = <value>, ...
WHERE Staus = 'Closed'
注意:你问题似乎含糊不清,因此上述可能无法正常工作。请根据您的具体使用情况进行调整。
即结果一个termID将是'106458',因为它在2010年5月26日首次关闭,并于2010年5月27日开放。打开状态发生在关闭状态之后。 我想获得已关闭的termIDs,现在它已经打开 – qods 2010-06-07 23:47:27
试试这个。这将在Oracle
SELECT TermID, COUNT(*) CNT FROM
(
SELECT ID,TermID,Status, Date,
LEAD(Status,1,NULL) OVER (PARTITION BY TermID ORDER BY Date DESC) NEXT_STATUS,
FROM MYTABLE
)
WHERE Status = 'Close' AND NEXT_STATUS = 'Open';
如何在tsql语法中编写此查询 – qods 2010-06-07 23:49:02
如果它支持SQL:2003中的窗口函数,它应该在T-SQL中工作。你应该能够通过你的文档来验证。 – 2010-06-16 22:05:54
工作什么数据库... – 2010-06-07 15:38:36
你怎么知道什么日期是'117220'最新的,和'119377'他们都标有相同的日期和状态? – 2010-06-07 15:41:41
你可能想尝试重述你的问题。您要求统计TermID,但您还想更改TermID状态和日期?如上所述,我不确定你想要做什么。我会把问题分解成单独的部分,而不是试图一次性说明你的整个问题。 – 2010-06-07 15:47:58