【问题标题】:SQL subquery without loop through recordset没有循环遍历记录集的 SQL 子查询
【发布时间】:2017-08-05 20:54:35
【问题描述】:

这是一个简单的查询:

SELECT        fDATE, fRAIN
FROM            tRAIN
WHERE        (fRAIN >=5)

检索到的查询可能类似于:

Query Result

现在,我想获取对应于较长雨季的子集,在这种情况下,日期在 10 月 9 日到 13 日之间。 ¿ 有没有一种方法可以在不循环记录集的情况下做到这一点?

感谢您的帮助。问候

【问题讨论】:

  • 季节大小由连续天数决定?
  • 预期结果是什么?
  • 你的数据库是什么?
  • 查看community.oracle.com/thread/1005633 的解决方案
  • 数据库包含自 2004 年至今的每日测量值。记录了几个测量站。查询比我在示例中显示的更复杂,但目的是获得更长的雨站。我无法从包含较长雨季的日期范围开始知道。我知道如何循环记录。我只想知道是否有另一种没有循环的方法。是的,用 rain>= value 计算连续天数并检索更长的系列是目标。谢谢。 – 何塞·费尔南多·吉拉尔多·希门尼斯 8 分钟前

标签: sql loops subquery


【解决方案1】:

How to get count of consecutive dates 发布的答案指导下,我已经完成了任务

WITH Q4 AS (
SELECT Q3.fDate, Q3.RW
FROM
(SELECT 
RW=ROW_NUMBER() OVER( PARTITION BY GRP  ORDER BY fDate) ,fDate
FROM
(
SELECT 
fDate, DATEDIFF(Day, '1900-01-01' , fDate)- ROW_NUMBER() OVER( ORDER BY 
fDate ) AS GRP
FROM (SELECT CONVERT(DATE,CONCAT(fYEAR , '/' , fMONTH , '/' ,fDAY),111) AS fDate, 
fRAIN 
FROM tRain
WHERE (fRain >= _value AND fStation = '_string' AND fYear = _value)
) Q1 
) Q2
) Q3
)
SELECT (DATEADD(DAY,-Q4.RW+1,Q4.fDate)) AS Start_Date, Q4.fDate AS 
Final_Date, Q4.RW as Season_Length
FROM Q4
WHERE Q4.RW= (SELECT TOP 1 MAX(Q4.RW) FROM Q4)

输出如下:

QUERY RESULT

问候

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多