คำถามติดแท็ก gaps-and-islands

7
จัดตารางเวลารายวันเป็น [วันที่เริ่ม; วันที่สิ้นสุด] ช่วงเวลาพร้อมรายการวันในสัปดาห์
ฉันต้องการแปลงข้อมูลระหว่างสองระบบ ระบบแรกจัดเก็บตารางเวลาเป็นรายการธรรมดาของวันที่ แต่ละวันที่รวมอยู่ในกำหนดการคือหนึ่งแถว อาจมีช่องว่างต่าง ๆ ในลำดับของวันที่ (วันหยุดสุดสัปดาห์วันหยุดราชการและหยุดอีกต่อไปบางวันของสัปดาห์อาจไม่รวมอยู่ในตาราง) ไม่มีช่องว่างเลยแม้แต่วันหยุดสุดสัปดาห์ก็สามารถรวม กำหนดการอาจนานถึง 2 ปี โดยปกติจะใช้เวลาไม่กี่สัปดาห์ นี่คือตัวอย่างง่ายๆของตารางที่ครอบคลุมสองสัปดาห์ยกเว้นวันหยุดสุดสัปดาห์ (มีตัวอย่างที่ซับซ้อนมากขึ้นในสคริปต์ด้านล่าง): +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | …

6
ค้นหาหมายเลขฟรี“ n” ติดต่อกันจากตาราง
ฉันมีตารางที่มีตัวเลขเช่นนี้ (สถานะเป็นได้ทั้งฟรีหรือถูกมอบหมาย) สถานะหมายเลข id_set ----------------------- 1 000001 ที่มอบหมาย 1 000002 ฟรี 1 000003 มอบหมาย 1 000004 ฟรี 1 000005 ฟรี 1 000006 มอบหมาย 1 000007 มอบหมาย 1 000008 ฟรี 1 000009 ฟรี 1 000010 ฟรี 1 000011 ได้รับมอบหมาย 1 000012 ได้รับมอบหมาย 1 000013 ได้รับมอบหมาย 1 000014 ฟรี 1 000015 ได้รับมอบหมาย …

7
การจัดกลุ่มหรือหน้าต่าง
ฉันมีสถานการณ์ที่ฉันคิดว่าสามารถแก้ไขได้โดยใช้ฟังก์ชั่นหน้าต่าง แต่ฉันไม่แน่ใจ ลองนึกภาพตารางต่อไปนี้ CREATE TABLE tmp ( date timestamp, id_type integer ) ; INSERT INTO tmp ( date, id_type ) VALUES ( '2017-01-10 07:19:21.0', 3 ), ( '2017-01-10 07:19:22.0', 3 ), ( '2017-01-10 07:19:23.1', 3 ), ( '2017-01-10 07:19:24.1', 3 ), ( '2017-01-10 07:19:25.0', 3 ), ( '2017-01-10 07:19:26.0', 5 …

5
การเติมข้อมูลที่หายไปตามค่าสิ้นเดือนก่อนหน้า
รับข้อมูลต่อไปนี้: create table #histories ( username varchar(10), account varchar(10), assigned date ); insert into #histories values ('PHIL','ACCOUNT1','2017-01-04'), ('PETER','ACCOUNT1','2017-01-15'), ('DAVE','ACCOUNT1','2017-03-04'), ('ANDY','ACCOUNT1','2017-05-06'), ('DAVE','ACCOUNT1','2017-05-07'), ('FRED','ACCOUNT1','2017-05-08'), ('JAMES','ACCOUNT1','2017-08-05'), ('DAVE','ACCOUNT2','2017-01-02'), ('PHIL','ACCOUNT2','2017-01-18'), ('JOSH','ACCOUNT2','2017-04-08'), ('JAMES','ACCOUNT2','2017-04-09'), ('DAVE','ACCOUNT2','2017-05-06'), ('PHIL','ACCOUNT2','2017-05-07') ; ... ซึ่งแสดงถึงเมื่อผู้ใช้ที่ได้รับมอบหมายให้กับบัญชี ฉันกำลังมองหาผู้ที่เป็นเจ้าของบัญชีที่กำหนดในวันสุดท้ายของแต่ละเดือน (วันที่ได้รับมอบหมายคือวันที่บัญชีโอนการเป็นเจ้าของ) โดยมีการสิ้นเดือนที่ขาดหายไป (อาจสร้างจากdatesตารางที่มีประโยชน์ที่ฉันมีอยู่) มีคอลัมน์ที่มีประโยชน์DateKey, DateและLastDayOfMonth[มารยาทของ @AaronBertrand]) 1 ผลลัพธ์ที่ต้องการคือ: PETER, ACCOUNT1, 2017-01-31 PETER, ACCOUNT1, 2017-02-28 DAVE, ACCOUNT1, 2017-03-31 …

4
คำนวณจำนวนการเข้าชมทั้งหมด
ฉันกำลังพยายามเขียนแบบสอบถามที่ฉันต้องคำนวณจำนวนการเข้าชมสำหรับลูกค้าโดยดูแลวันที่ทับซ้อนกัน สมมติว่าสำหรับวันที่เริ่มต้น itemID 2009 คือ 23 และวันที่สิ้นสุดคือ 26 ดังนั้นรายการ 20010 อยู่ระหว่างวันเหล่านี้เราจะไม่เพิ่มวันที่ซื้อนี้ไปยังจำนวนรวมของเรา ตัวอย่างสถานการณ์: Item ID Start Date End Date Number of days Number of days Candidate for visit count 20009 2015-01-23 2015-01-26 4 4 20010 2015-01-24 2015-01-24 1 0 20011 2015-01-23 2015-01-26 4 0 20012 2015-01-23 2015-01-27 5 1 20013 2015-01-23 …

2
เลือกลำดับต่อเนื่องที่ยาวที่สุด
ฉันพยายามสร้างแบบสอบถามใน PostgreSQL 9.0 ที่ได้รับลำดับของแถวต่อเนื่องที่ยาวที่สุดสำหรับคอลัมน์ที่ระบุ พิจารณาตารางต่อไปนี้: lap_id (serial), lap_no (int), car_type (enum), race_id (int FK) ในกรณีที่มีความเป็นเอกลักษณ์ของแต่ละlap_no(race_id, car_type) ฉันต้องการให้คิวรีสร้างลำดับที่ยาวที่สุดสำหรับหนึ่งrace_idและcar_typeดังนั้นจึงส่งคืนint(หรือยาว) ที่สูงที่สุด ด้วยข้อมูลต่อไปนี้: 1, 1, red, 1 2, 2, red, 1 3, 3, red, 1 4, 4, red, 1 5, 1, blue, 1 6, 5, red, 1 7, 2, blue, 1 8, 1, green, …

4
ช่องว่างและเกาะ: โซลูชันไคลเอ็นต์เทียบกับข้อความค้นหา T-SQL
โซลูชัน T-SQL สำหรับช่องว่างและหมู่เกาะสามารถทำงานได้เร็วกว่าโซลูชัน C # ที่ทำงานบนไคลเอนต์หรือไม่ หากต้องการเจาะจงให้เราให้ข้อมูลการทดสอบบางอย่าง: CREATE TABLE dbo.Numbers ( n INT NOT NULL PRIMARY KEY ) ; GO INSERT INTO dbo.Numbers ( n ) VALUES ( 1 ) ; GO DECLARE @i INT ; SET @i = 0 ; WHILE @i < 21 BEGIN INSERT INTO dbo.Numbers ( …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.