選擇列考慮以下表中,其與資產的調度涉及的應用程序:從第一和最後一個記錄匹配的標準
date group_id free_spots
2011-01-01 1 0
2011-01-01 2 0
2011-01-08 1 1
2011-01-08 2 0
2011-01-15 1 1
2011-01-15 2 1
2011-01-22 1 2
2011-01-22 2 2
2011-01-29 1 1
2011-01-29 2 0
2011-02-05 1 0
2011-02-05 2 1
2011-02-12 1 0
2011-02-12 2 1
2011-02-19 1 0
2011-02-19 2 0
此信息放在一起使用利用不同的表一個相當昂貴的查詢(〜100ms的) 。結果可以放在臨時表中,也可以直接內聯使用。
我想要的是找到提供點的第一個日期(free_spots> 0)。然後在同一張唱片中,我想要最後一個拍攝點的日期。所有這些都由group_id分組。
爲了說明,在給定的示例表,我希望下面的輸出:
group_id start_date end_date
1 2011-01-08 2011-01-29
2 2011-01-15 2011-01-22
2 2011-02-05 2011-02-12
現在,我已經想出了一個粗略的解決方案。使用給定的表我想:
- 抓住這些之前*由NULL或與free_spots記錄< = 0(開始日期)
- 對於所有這些記錄的所有記錄,搶到第一接班人*是成功由一行爲空或有free_spots < = 0
- 以某種方式在這裏混合group_id分組。
但是,這似乎是不可能的,因爲我不能再次使用相同的子查詢來查找後繼或前面的記錄。與臨時表格相同。這些我無法打開並重復使用一次以上。
(*在之前或基於該日期成功了。對於每個組,該日期是相等的,連續的和均勻的(但任意地)間隔開。一般7或14天)
請參閱我的更新,有一個MySQL的翻譯爲我工作的SQL Server的答案的開始。 – ErikE 2012-07-24 00:32:16