我的表看起来像这个订单..我想用这些条件计算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
答案 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';