คำถามติดแท็ก greatest-n-per-group

ค้นหาแถวที่มีค่ามากที่สุด / น้อยที่สุดต่อกลุ่ม

16
เลือกแถวแรกในแต่ละกลุ่มจำแนกตามกลุ่ม?
เป็นชื่อแนะนำ, GROUP BYฉันต้องการที่จะเลือกแถวแรกของชุดของแต่ละแถวมีการจัดกลุ่ม โดยเฉพาะถ้าฉันมีpurchasesตารางที่มีลักษณะเช่นนี้: SELECT * FROM purchases; เอาท์พุทของฉัน: id | ลูกค้า | รวม --- + + ---------- ------ 1 | โจ | 5 2 | แซลลี่ | 3 3 | โจ | 2 4 | แซลลี่ | 1 ฉันต้องการค้นหาidการซื้อที่ใหญ่ที่สุด ( total) จากแต่ละcustomerรายการ บางสิ่งเช่นนี้ SELECT FIRST(id), customer, FIRST(total) FROM purchases …

27
ดึงข้อมูลระเบียนสุดท้ายในแต่ละกลุ่ม - MySQL
มีตารางmessagesที่มีข้อมูลดังแสดงด้านล่าง: Id Name Other_Columns ------------------------- 1 A A_data_1 2 A A_data_2 3 A A_data_3 4 B B_data_1 5 B B_data_2 6 C C_data_1 ถ้าฉันเรียกใช้คิวselect * from messages group by nameรีฉันจะได้ผลลัพธ์ดังนี้: 1 A A_data_1 4 B B_data_1 6 C C_data_1 แบบสอบถามใดจะส่งคืนผลลัพธ์ต่อไปนี้ 3 A A_data_3 5 B B_data_2 6 C C_data_1 นั่นคือบันทึกสุดท้ายในแต่ละกลุ่มควรส่งคืน …

18
ฉันจะเลือกแถวที่มี MAX (ค่าคอลัมน์) DISTINCT ตามคอลัมน์อื่นใน SQL ได้อย่างไร
ตารางของฉันคือ: id home datetime player resource ---|-----|------------|--------|--------- 1 | 10 | 04/03/2009 | john | 399 2 | 11 | 04/03/2009 | juliet | 244 5 | 12 | 04/03/2009 | borat | 555 3 | 10 | 03/03/2009 | john | 300 4 | 11 | 03/03/2009 | juliet …

30
ดึงข้อมูลแถวที่มีค่า Max สำหรับคอลัมน์
โต๊ะ: UserId, Value, Date. ฉันต้องการได้รับ UserId, ค่าสูงสุด (วันที่) สำหรับแต่ละ UserId นั่นคือค่าสำหรับ UserId แต่ละอันที่มีวันที่ล่าสุด มีวิธีการทำเช่นนี้เพียงแค่ใน SQL? (เฉพาะ Oracle) อัปเดต:ขอโทษสำหรับความกำกวมใด ๆ : ฉันต้องได้รับ UserIds ทั้งหมด แต่สำหรับแต่ละ UserId เฉพาะแถวนั้นที่ผู้ใช้นั้นมีวันล่าสุด

20
รับ 1 แถวแรกของแต่ละกลุ่ม
ฉันมีตารางที่ฉันต้องการรับรายการล่าสุดสำหรับแต่ละกลุ่ม นี่คือตาราง: DocumentStatusLogs โต๊ะ |ID| DocumentID | Status | DateCreated | | 2| 1 | S1 | 7/29/2011 | | 3| 1 | S2 | 7/30/2011 | | 6| 1 | S1 | 8/02/2011 | | 1| 2 | S1 | 7/28/2011 | | 4| 2 | S2 | 7/30/2011 …

13
ใช้ LIMIT ภายใน GROUP BY เพื่อรับผลลัพธ์ N รายการต่อกลุ่มหรือไม่
แบบสอบถามต่อไปนี้: SELECT year, id, rate FROM h WHERE year BETWEEN 2000 AND 2009 AND id IN (SELECT rid FROM table2) GROUP BY id, year ORDER BY id, rate DESC อัตราผลตอบแทน: year id rate 2006 p01 8 2003 p01 7.4 2008 p01 6.8 2001 p01 5.9 2007 p01 5.3 2009 p01 …

9
การเข้าร่วม SQL: เลือกระเบียนสุดท้ายในความสัมพันธ์แบบหนึ่ง - ต่อ - กลุ่ม
สมมติว่าฉันมีตารางลูกค้าและตารางการซื้อ การซื้อแต่ละครั้งเป็นของลูกค้าหนึ่งราย ฉันต้องการรับรายชื่อลูกค้าทั้งหมดพร้อมกับการซื้อครั้งสุดท้ายในหนึ่งคำสั่ง SELECT การปฏิบัติที่ดีที่สุดคืออะไร? คำแนะนำเกี่ยวกับการสร้างดัชนีใด ๆ โปรดใช้ชื่อตาราง / คอลัมน์เหล่านี้ในคำตอบของคุณ: ลูกค้า: id, ชื่อ การซื้อ: id, customer_id, item_id, วันที่ และในสถานการณ์ที่ซับซ้อนมากขึ้นจะเป็นประโยชน์ในการทำให้ฐานข้อมูลผิดปกติด้วยการซื้อสินค้าครั้งสุดท้ายลงในตารางลูกค้าหรือไม่ หากรหัส (ซื้อ) มีการรับประกันว่าจะเรียงตามวันที่งบสามารถจะง่ายขึ้นโดยใช้สิ่งที่ชอบLIMIT 1?

24
ROW_NUMBER () ใน MySQL
มีวิธีที่ดีใน MySQL เพื่อทำซ้ำฟังก์ชัน SQL Server ROW_NUMBER()หรือไม่ ตัวอย่างเช่น: SELECT col1, col2, ROW_NUMBER() OVER (PARTITION BY col1, col2 ORDER BY col3 DESC) AS intRow FROM Table1 ยกตัวอย่างเช่นฉันสามารถเพิ่มเงื่อนไขที่จะ จำกัดintRowไว้ที่ 1 เพื่อรับแถวเดียวที่มีค่าสูงสุดcol3สำหรับแต่ละ(col1, col2)คู่


18
รับเร็กคอร์ดที่มีค่าสูงสุดสำหรับผลลัพธ์ SQL กลุ่มที่จัดกลุ่มแต่ละกลุ่ม
คุณจะได้รับแถวที่มีค่าสูงสุดสำหรับแต่ละชุดที่จัดกลุ่มได้อย่างไร ฉันเคยเห็นรูปแบบที่ซับซ้อนเกินไปของคำถามนี้และไม่มีคำตอบที่ดีเลย ฉันพยายามรวบรวมตัวอย่างที่ง่ายที่สุดเท่าที่จะทำได้: จากตารางด้านล่างด้วยคอลัมน์บุคคลกลุ่มและอายุคุณจะได้คนที่เก่าแก่ที่สุดในแต่ละกลุ่มอย่างไร (เน็คไทภายในกลุ่มควรให้ผลลัพธ์ตัวอักษรแรก) Person | Group | Age --- Bob | 1 | 32 Jill | 1 | 34 Shawn| 1 | 42 Jake | 2 | 29 Paul | 2 | 36 Laura| 2 | 39 ชุดผลลัพธ์ที่ต้องการ: Shawn | 1 | 42 Laura | 2 | 39

22
ฉันจะสอบถาม sql สำหรับวันที่บันทึกล่าสุดสำหรับผู้ใช้แต่ละคนได้อย่างไร
ฉันมีตารางที่เป็นรายการคอลเลกชันว่าเมื่อผู้ใช้เข้าสู่ระบบ username, date, value -------------------------- brad, 1/2/2010, 1.1 fred, 1/3/2010, 1.0 bob, 8/4/2009, 1.5 brad, 2/2/2010, 1.2 fred, 12/2/2009, 1.3 etc.. ฉันจะสร้างแบบสอบถามที่จะให้วันที่ล่าสุดแก่ผู้ใช้แต่ละคนได้อย่างไร อัปเดต:ฉันลืมว่าฉันต้องมีค่าที่ตรงกับวันที่ล่าสุด

14
เลือก 10 อันดับแรกสำหรับแต่ละประเภท
ฉันต้องการส่งกลับ 10 อันดับแรกจากแต่ละส่วนในแบบสอบถามเดียว ใครช่วยได้ด้วยวิธีทำ ส่วนคือหนึ่งในคอลัมน์ในตาราง ฐานข้อมูลคือ SQL Server 2005 ฉันต้องการคืน 10 อันดับแรกตามวันที่ที่ป้อน ส่วนคือธุรกิจท้องถิ่นและคุณลักษณะ สำหรับหนึ่งวันที่เฉพาะฉันต้องการเฉพาะแถวบนสุด (10) แถวธุรกิจ (รายการล่าสุด) แถวบนสุด (10) แถวท้องถิ่นและคุณลักษณะด้านบน (10)

3
นุ่นได้รับ n บันทึกสูงสุดภายในแต่ละกลุ่ม
สมมติว่าฉันมี DataFrame นุ่นเช่นนี้: >>> df = pd.DataFrame({'id':[1,1,1,2,2,2,2,3,4],'value':[1,2,3,1,2,3,4,1,1]}) >>> df id value 0 1 1 1 1 2 2 1 3 3 2 1 4 2 2 5 2 3 6 2 4 7 3 1 8 4 1 ฉันต้องการรับ DataFrame ใหม่โดยมี 2 อันดับแรกสำหรับแต่ละ id เช่นนี้ id value 0 1 1 …

10
รับบันทึกสูงสุด n รายการสำหรับผลลัพธ์แต่ละกลุ่ม
ต่อไปนี้เป็นตัวอย่างที่ง่ายที่สุดที่เป็นไปได้แม้ว่าวิธีการแก้ปัญหาใด ๆ ควรจะสามารถปรับให้ได้ตามต้องการ แต่จะต้องใช้ผลลัพธ์ที่มีจำนวนมากที่สุด n: จากตารางด้านล่างด้วยคอลัมน์บุคคลกลุ่มและอายุคุณจะได้ 2 คนที่เก่าแก่ที่สุดในแต่ละกลุ่มอย่างไร (ความสัมพันธ์ภายในกลุ่มไม่ควรให้ผลลัพธ์มากขึ้น แต่ให้ 2 อันดับแรกตามลำดับตัวอักษร) + -------- + ------- + ----- + | คน | กลุ่ม | อายุ | + -------- + ------- + ----- + | Bob | 1 | 32 | | จิล 1 | 34 | | ชอว์น 1 | …

11
เลือกแถวที่มีวันที่ล่าสุดต่อผู้ใช้
ฉันมีตาราง ("lms_attendance") ของเวลาเช็คอินและเวลาออกของผู้ใช้ที่มีลักษณะดังนี้: id user time io (enum) 1 9 1370931202 out 2 9 1370931664 out 3 6 1370932128 out 4 12 1370932128 out 5 12 1370933037 in ฉันกำลังพยายามสร้างมุมมองของตารางนี้ซึ่งจะแสดงผลเฉพาะระเบียนล่าสุดต่อ ID ผู้ใช้ในขณะที่ให้ค่า "in" หรือ "out" ให้ฉันทำดังนี้ id user time io 2 9 1370931664 out 3 6 1370932128 out 5 12 1370933037 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.