簡體   English   中英

SQL 服務器:比較多個記錄的日期

[英]SQL Server: Comparing dates from multiple records

在表(“ASC_PMA_TBL”)中創建零件時,會自動生成一個編號。 隨后創建的任何“子部分”都具有關聯的編號。 因此,例如,“主”部件可能是 18245,它可能有幾個子部件,如“18245-50”或“18245-40”等。子部件始終通過主部件編號識別,后跟一個“-”然后是一個兩位數。 每個子部分都有一個與之關聯的日期(“EO_DATE”)。 我想要做的就是顯示“主”日期與每個子部分日期不匹配的記錄。 所有數據都在一個表“ASC_PMA_TBL”中。

通常這可以使用連接輕松實現。 然而在數據庫中,子部分通過使用外鍵與它們的主人無關,所以我不得不找到一種不同的做事方式。

此外,日期字段是一個日期/時間字段,因此為了比較它們,我首先必須將該字段轉換為僅日期字段。 我可以這樣做,但是我無法在我的查詢中使用別名!

任何幫助深表感謝:)

我試過創建臨時表和使用子查詢,但無法解決這個問題:(

更新:設法使用臨時表解決問題,截斷子部件的部件號以匹配主部件,然后將兩者連接起來比較日期。 可能很亂,但它有效!

SELECT
    PMA_PART_ONLY,
    CONVERT(DATE,PMA_EFFECT_DATE_OFF) As 'EO_DATE'
INTO
    ##MParts
FROM
    ASC_PMA_TBL
WHERE
    (PMA_PROC_CODE = 'M') AND
    (PMA_EFFECT_DATE_OFF IS NOT NULL)
SELECT
    PMA_PART_ONLY,
    CONVERT(DATE,PMA_EFFECT_DATE_OFF) As 'EO_DATE',
    SUBSTRING(PMA_PART_ONLY,0,CHARINDEX('-',PMA_PART_ONLY,0)) As 'MP_NO'
INTO
    ##SParts
FROM
    ASC_PMA_TBL
WHERE
    (PMA_PROC_CODE = 'S') AND
    (PMA_EFFECT_DATE_OFF IS NOT NULL)
SELECT
    ##SParts.PMA_PART_ONLY As 'SUB_PART_NO',
    ##MParts.EO_DATE As 'M_PART_DATE',
    ##SParts.EO_DATE As 'S_PART_DATE'
FROM
    ##MParts INNER JOIN ##SParts ON ##SParts.MP_NO = ##MParts.PMA_PART_ONLY
WHERE
    (##MParts.EO_DATE <> ##SParts.EO_DATE)
ORDER BY
    SUB_PART_NO DESC
    
DROP TABLE ##MParts
DROP TABLE ##SParts

如果你只想比較日期而不是時間,你必須轉換日期:

select *
from ASC_PMA_TBL master
inner join ASC_PMA_TBL parts
 ON parts.number like CAST(master.number AS VARCHAR(30)) + '[_]%'
where CAST(master.EO_DATE AS DATE) <> CAST(parts.EO_DATE AS DATE)

這是主要的想法,獲取所有零件編號類似於 master number + underscope 的 master 和 parts。

請注意,執行 LIKE 時必須轉義 []-引號中的“_”

暫無
暫無

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

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