1
一個MySQL表被定義爲:查找MySQL表孔,其中ID是不是唯一
CREATE TABLE tbl_misure_30m (
m_rcd_id INT NOT NULL AUTO_INCREMENT ,
m_fon_id INT UNSIGNED,
m_timestamp TIMESTAMP,
m_fon_rcd_id INT UNSIGNED,
m_fon_Leq FLOAT(4,2),
m_fon_LsMax FLOAT(4,2),
m_Leq_state INT,
m_LsMax_state INT,
m_fon_mem_block INT,
INDEX fon_key (m_fon_id),
FOREIGN KEY (m_fon_id) REFERENCES tbl_users(fon_id)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY (m_rcd_id)
) ENGINE = InnoDB;
其中:
- m_rcd_id是自動增量索引
- m_fon_id是「我的用戶」ID有幾個m_fon_rcd_id
- m_fon_rcd_id是相對於每個m_fon_id的記錄ID(因此它們不是唯一的)。
不幸的是,數據庫設計無法更改。
現在,我需要驗證列m_fon_rcd_id(爲每個m_fon_id)不包含洞(在這種情況下,我需要知道範圍)。
我想要的是一個結果集: gap_starts_at | gap_ends_at | m_fon_id |
我發現this answer但它需要是理所當然的各種ID都是唯一的:
SELECT (t1.m_fon_rcd_id + 1) as gap_starts_at,
(SELECT MIN(t3.m_fon_rcd_id) -1 FROM tbl_misure_30m t3 WHERE t3.m_fon_rcd_id > t1.m_fon_rcd_id) as gap_ends_at
FROM tbl_misure_30m t1
WHERE NOT EXISTS (SELECT t2.m_fon_rcd_id FROM tbl_misure_30m t2 WHERE t2.m_fon_rcd_id = t1.m_fon_rcd_id + 1)
HAVING gap_ends_at IS NOT NULL
有什麼建議?
在此先感謝!
謝謝很多爲您的快速答案!我嘗試你的建議,但它給了我奇怪的結果(它似乎沒有考慮到m_fon_id)。例如。我有一個m_fon_id = 123其中MIN(m_fon_rcd_id)= 11145和MAX(m_fon_rcd_id)= 11191之間沒有洞,但我沒有看到這個邊界到結果集。有沒有辦法得到如下結果集:| m_fon_id | gapstart | gap_ends | ? – Barzo
@Barze。 。 。雖然您在括號註釋中提到了「m_fon_id」,但它並不是查詢的一部分。目前還不清楚它應該扮演什麼角色。您應該使用樣本數據和期望的結果編輯您的問題。 –
你是對的,我很抱歉!我沒有這樣想過。再次感謝您的支持!! – Barzo