SQL查询示例

时间:2010-06-07 15:34:55

标签: sql

我的表看起来像这个订单..我想用这些条件计算TermID;如果有可能还想获得带有这些标题的结果集

- TermID必须具有关闭或开放状态
- TermID状态必须转为打开(关闭打开)
- 状态日期(打开状态)必须大于关闭状态日期

与我的问候,


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

2 个答案:

答案 0 :(得分:0)

我想你在这里问两个问题:


1. 如何计算所有TermID?

答案:您在SQL中使用count(...)聚合函数。

示例:

SELECT count(TermID) from <table>

这会计算表格中的所有TermID。


2. 如何更新记录以获得新的状态/状态日期?

答案:使用UPDATE语句:

UPDATE <table>
SET Status = 'Open', <column name> = <value>, ...
WHERE Staus = 'Closed'

注意:您的问题似乎含糊不清,因此上述内容可能效果不佳。请根据您的具体用例量身定制。

答案 1 :(得分:0)

试试这个。它将在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';