簡體   English   中英

SQL查詢兩個連續的行

[英]SQL Querying for two Consecutive Rows

我有以下查詢:

SELECT year_week FROM web_details where location = ''JF'' AND property_id = ''FARM''

產生以下結果。

YEAR_WEEK
201035
201036
201037
201039
201041
201044
201045
201048

我真正想要的是產生一組結果,該結果僅在連續值可用時才顯示值-因此產生以下結果...

YEAR_WEEK
201035
201036
201044

有人知道怎么做嗎? 謝謝


從這里獲得一些幫助的答案。 謝謝

SELECT year_week FROM web_details w 
WHERE location = ''JF'' AND property_id = ''FARM'' AND EXISTS (
SELECT * FROM web_details 
WHERE location = ''JF'' AND property_id = ''FARM'' 
AND cast(year_week as numeric) = cast(w.year_week as numeric) + 1
)
SELECT year_week
  FROM web_details w
 WHERE location = ''JF''
   AND property_id = ''FARM''
   AND EXISTS (
        SELECT * FROM web_details
         WHERE location = ''JF''
           AND property_id = ''FARM''
           AND year_week = w.year_week + 1
       )
SELECT year_week
FROM web_details
where location = ''JF''
  AND property_id = ''FARM''
  AND year_week + 1 IN ( SELECT year_week
                         FROM web_details
                         where location = ''JF''
                           AND property_id = ''FARM''
                       )
SELECT 
    CAST(year_week AS NUMERIC) as year_week 
FROM 
    web_details wd 
WHERE 
    EXISTS(
        SELECT 
            year_week
        FROM 
            web_details wd2 
        WHERE 
            wd2.year_week = CASE(RIGHT(wd.year_week, 2))
                        WHEN '48' THEN CAST((CAST(LEFT(wd.year_week,4) AS INT) + 1) AS VARCHAR(4)) + '01'
                        ELSE LEFT(wd.year_week,4) + CAST((CAST(RIGHT(wd.year_week,2) AS INT) + 1) AS VARCHAR(2))
                     END
    )

初稿可能需要一些調整,具體取決於日期的處理方式(星期幾開始,一年中的第一周,等等)。 年底驗證也出現在最后使用的行中。

DECLARE @web_details TABLE (year_week VARCHAR(8))

INSERT INTO @web_details (year_week) VALUES ('201035')
INSERT INTO @web_details (year_week) VALUES ('201036')
INSERT INTO @web_details (year_week) VALUES ('201037')
INSERT INTO @web_details (year_week) VALUES ('201039')
INSERT INTO @web_details (year_week) VALUES ('201041')
INSERT INTO @web_details (year_week) VALUES ('201044')
INSERT INTO @web_details (year_week) VALUES ('201045')
INSERT INTO @web_details (year_week) VALUES ('201048')
INSERT INTO @web_details (year_week) VALUES ('201052')
INSERT INTO @web_details (year_week) VALUES ('201101')

DECLARE @results TABLE (year_week VARCHAR(8), year_week_datetime DATETIME, n INT)

INSERT INTO @results (year_week, year_week_datetime, n)
SELECT
    year_week,
    DATEADD(week,
            CAST(SUBSTRING(year_week, 5, 2) AS INT) - 1,
            CAST(SUBSTRING(year_week, 1, 4) + '/1/1' AS DATETIME)
            ),
    ROW_NUMBER() OVER(ORDER BY year_week) AS n FROM @web_details

SELECT
    t1.year_week
FROM
    @results AS t1 JOIN @results AS t2 ON t1.n + 1 = t2.n
WHERE
    DATEDIFF(week, t1.year_week_datetime, t2.year_week_datetime) = 1

暫無
暫無

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

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