ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ทำ select sql แบบเอาข้อมูลไม่ซ้ำกันมาแสดงทีครับ  (อ่าน 51196 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
theonsenz
Newbie
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 34



ดูรายละเอียด เว็บไซต์
« เมื่อ: 23 ธันวาคม 2012, 10:50:01 »

SELECT table1.id_name,table1.date,table1.charac,table2.name FROM table1INNER JOIN table2 ON table2.id_name=table1.id_name

ตอนนี้คือข้อมูลที่ select ออกมาทั้งหมดครับ

แต่อยากให้กรองออกโดยที่เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด

ช่วยทีครับ ขอบคุณล่วงหน้า  Tongue
บันทึกการเข้า

น่ารักจุงเบย
mikeyx
Verified Seller
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 271
ออฟไลน์ ออฟไลน์

กระทู้: 4,049



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 23 ธันวาคม 2012, 10:50:44 »

group by
บันทึกการเข้า
theonsenz
Newbie
*

พลังน้ำใจ: 6
ออฟไลน์ ออฟไลน์

กระทู้: 34



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 23 ธันวาคม 2012, 10:58:11 »

group by มันไม่ใช่ข้อมูลล่าสุดอ่ะครับ มันเอาตัวแรกออกมา
บันทึกการเข้า

น่ารักจุงเบย
dekmv
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 222
ออฟไลน์ ออฟไลน์

กระทู้: 3,264



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 23 ธันวาคม 2012, 11:30:43 »

SELECT DISTINCT column_name(s)
FROM table_name

ผมไม่ได้ว่า mySQL หรือ Oracle นะครับ ถ้าผิดขออภัยนะครับ
บันทึกการเข้า
c0untry-m@n
ก๊วนเสียว
*

พลังน้ำใจ: 27
ออฟไลน์ ออฟไลน์

กระทู้: 261



ดูรายละเอียด
« ตอบ #4 เมื่อ: 23 ธันวาคม 2012, 11:34:47 »

ประมาณนี้หรือเปล่าลองดูนะครับ ผมไม่ได้ลองนะ ผิดพลาดขออภัย

SELECT DISTINCT(table1.id_name),table1.date,table1.charac,table2.name FROM table1 LEFT JOIN table2 ON table2.id_name=table1.id_name
บันทึกการเข้า
psuriya
สมุนแก๊งเสียว
*

พลังน้ำใจ: 29
ออฟไลน์ ออฟไลน์

กระทู้: 717



ดูรายละเอียด
« ตอบ #5 เมื่อ: 23 ธันวาคม 2012, 11:45:14 »

SELECT table1.id_name,table1.date,table1.charac,table2.name FROM table1INNER JOIN table2 ON table2.id_name=table1.id_name

ตอนนี้คือข้อมูลที่ select ออกมาทั้งหมดครับ

แต่อยากให้กรองออกโดยที่เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด

ช่วยทีครับ ขอบคุณล่วงหน้า  Tongue

GROUP BY table1.id_name ORDER BY table1.id_name DESC

ถ้า table1.id_name เป็นตัวเลขและAuto ครับ หรือถ้ามีฟิลด์ที่เก็บเป็น Datetime ก็ ORDER BY ฟิลด์นั้นครับ
บันทึกการเข้า

รับพัฒนาและแก้ไขเว็บไซต์ด้วย Django
c0untry-m@n
ก๊วนเสียว
*

พลังน้ำใจ: 27
ออฟไลน์ ออฟไลน์

กระทู้: 261



ดูรายละเอียด
« ตอบ #6 เมื่อ: 23 ธันวาคม 2012, 13:09:16 »

ประมาณนี้หรือเปล่าลองดูนะครับ ผมไม่ได้ลองนะ ผิดพลาดขออภัย

SELECT DISTINCT(table1.id_name),table1.date,table1.charac,table2.name FROM table1 LEFT JOIN table2 ON table2.id_name=table1.id_name

ที่ไม่ใช้ group by เพราะถ้ามีคอลัมภ์อื่นต่างกัน ถึง group by มันก็จะได้ id_name ซ้ำกันมาอีกครับ
เช่น ในกรณีที่ 1 id_name มี date ต่างหลาย record ที่ต่างกัน เป็นต้นครับผม

อันนี้หมายถึงการ group by ทุกฟิลด์ที่ดึงมานะครับ
แต่ถ้า group by id_name ตัวเดียว แต่ดึงข้อมูลหลายฟิลด์ ไม่แน่ใจว่า mysql ใช้ได้หรือเปล่า
แต่สำหรับ ms sql ไม่ได้ครับ ตัวอื่นไม่แน่ใจ

ทั้งนี้ผมก็ยังไม่ได้ทดสอบนะครับ เพียงแต่แนะนำแนวทางให้ไปทดลองเองครับ ผิดพลาดขออภัย
บันทึกการเข้า
MapTwoZa
ก๊วนเสียว
*

พลังน้ำใจ: 75
ออฟไลน์ ออฟไลน์

กระทู้: 366



ดูรายละเอียด
« ตอบ #7 เมื่อ: 24 ธันวาคม 2012, 02:17:29 »

ผมว่าทำแบบนี้นะ

จากเงื่อนไขนี้ >> เอาข้อมูลที่ table1.id_name ซ้ำกันออกไปอ่ะครับ โดยให้แสดงข้อมูลล่าสุด
จะได้
SELECT DISTINCT t.id_name from table1 t ORDER BY t.date

จากนั้นก็ยัด sub query ลงไปครับ จะได้
SELECT DISTINCT t.id_name,(select * from table1 ta where ta.pk = t.pk) from table1 t ORDER BY t.date

จบละครับ ใน sub query แก้เองเด้อ select * guide ให้เฉยๆ
บันทึกการเข้า

Good code quality Developer Cheesy
ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #8 เมื่อ: 26 ธันวาคม 2012, 17:38:53 »

สมมติว่ามี table1.date เก็บค่าความล่าสุด (คือวันเวลา ยิ่งมากยิ่งล่าสุด)

SELECT table1.id_name, table1.date, table1.charac, table2.name
FROM (SELECT id_name, max(date) AS date, charac FROM table1 GROUP BY id_name, charac) AS table1
INNER JOIN table2
ON table2.id_name=table1.id_name

บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์