簡體   English   中英

循環或遞歸SQL查詢

[英]Loop or recursive sql query

我有一張帶有數字和日期的表格(每個日期和日期不一定一定要間隔1個數字)。 當表格中沒有數字時,我想獲取日期計數。

我所擁有的(僅舉一個例子,日期和“ chiffres”更為復雜):

date                      |   chiffre
2014-09-30                |        2
2014-09-29                |        1
2014-09-28                |        2
2014-09-27                |        2
2014-09-26                |        1
2014-09-25                |        2
2014-09-24                |        2

等等...

我需要數字“ 1”:

actual_number_of_real_dates_between_two_given_dates
  1
  3

我的實際查詢感謝Gordon Linoff

select count(n.id) as difference
from nums n inner join
     (select min(date) as d1, max(date) as d2
      from (select date from nums where chiffre=1 order by date desc limit 2) d
     ) dd
where n.date between dd.d1 and dd.d2

如何測試第2行和第3行? 3和4等...不僅持續2個? 沒有“限制2”,我應該使用循環嗎? 或者我可以不用它嗎?

如果要查找表中1 s之間的間隔,則應從下一個“ 1”開始:

select n.*,
       (select date
        from nums n2
        where n2.chiffre = 1 and n2.date > n.date
        order by date
        limit 1
       ) next_date
from nums n
where chiffre = 1;

然后將其用作子查詢以獲取所需的內容:

select n.*,
       datediff(coalesce(next_date, now()), date) as days_between
from (select n.*,
             (select date
              from nums n2
              where n2.chiffre = 1 and n2.date > n.date
              order by date
              limit 1
             ) next_date
      from nums n
      where chiffre = 1
     ) n;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM