 |
จะคิวรี่ข้อมูลที่มีเวลาใกล้เคียงกัน โดยเลือกเอาเฉพาะข้อมูลแรก ขึ้นมาโชว์ได้ยังไงครับ |
|
 |
|
|
 |
 |
|
คิวรี่ในตัว sql management ขึ้นมาพบว่ามี ข้อมูลใกล้เคียงกัน 2 row เช่น
02/02/2015 - 08:30:00
02/02/2015 - 08:30:10
คำถามคือ ผมจะเลือกเฉพาะข้อมูลชุดแรกขึ้นมาโชว์อย่างเดียวต้อง WHERE ยังไงครับ
คำสั่งคิวรี่ของผมครับ
Code
SELECT TOP 300 [tb_reportslist].nUserID , [tb_reportslist].nDeviceID , (CONVERT(NVARCHAR(24),[tb_reportslist].dtDateTime,120))as dtDateTime , [imp_emp].strUserName , [imp_emp].[nUserID], [Device_sukishi].[DeviceID] , [Device_sukishi].[DeviceName] FROM [hr_scan].[dbo].[tb_reportslist] INNER JOIN [hr_scan].[dbo].[imp_emp] ON tb_reportslist.nUserID = imp_emp.[nUserID] INNER JOIN [hr_scan].[dbo].[Device_sukishi] ON tb_reportslist.nDeviceID = Device_sukishi.[DeviceID]
WHERE (CONVERT(date, tb_reportslist.dtDateTime)) BETWEEN '02-02-2015' AND '02-03-2015' AND tb_reportslist.nUserID = '571893' AND (nEvent NOT IN ('23')) order by dtDateTime
ขอบคุณครับ
Tag : PHP, Ms SQL Server 2005, Ms SQL Server 2008, Ms SQL Server 2012
|
ประวัติการแก้ไข 2015-02-18 16:57:59
|
 |
 |
 |
 |
Date :
2015-02-18 16:56:56 |
By :
BL@CK |
View :
883 |
Reply :
13 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
SELECT TOP 1 [tb_reportslist].nUserID , [tb_reportslist].nDeviceID , (CONVERT(NVARCHAR(24),[tb_reportslist].dtDateTime,120))as dtDateTime , [imp_emp].strUserName , [imp_emp].[nUserID], [Device_sukishi].[DeviceID] , [Device_sukishi].[DeviceName] FROM [hr_scan].[dbo].[tb_reportslist] INNER JOIN [hr_scan].[dbo].[imp_emp] ON tb_reportslist.nUserID = imp_emp.[nUserID] INNER JOIN [hr_scan].[dbo].[Device_sukishi] ON tb_reportslist.nDeviceID = Device_sukishi.[DeviceID]
WHERE (CONVERT(date, tb_reportslist.dtDateTime)) BETWEEN '02-02-2015' AND '02-03-2015' AND tb_reportslist.nUserID = '571893' AND (nEvent NOT IN ('23')) order by dtDateTime
|
 |
 |
 |
 |
Date :
2015-02-18 17:27:08 |
By :
progamer2000 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : progamer2000 เมื่อวันที่ 2015-02-18 17:27:08
รายละเอียดของการตอบ ::
ขอบคุณครับ
คือ ถ้าเปลี่ยนเป็น TOP 1 data ก็จะขึ้นแค่ row เดียวส่วน row อื่นมันไม่ขึ้นครับ
คือผลลัพธ์ที่ผมคิวรี่ขึ้นมาเป็นแบบนี้ครับ
2015-02-02 08:30:00
2015-02-02 08:30:10
2015-02-02 08:30:11
2015-02-02 18:33:08
2015-02-02 18:33:09
2015-02-03 08:30:13
2015-02-03 08:30:14
2015-02-03 18:33:08
2015-02-03 18:33:11
ผมต้องการแค่ ข้อมูลแรกของข้อมูลชุดที่คล้ายกันครับ ในที่นี้คือ
2015-02-02 08:30:00
2015-02-02 18:33:08
2015-02-03 08:30:13
2015-02-03 18:33:08
|
 |
 |
 |
 |
Date :
2015-02-18 17:41:48 |
By :
BL@CK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คงต้องตัด . ของ เวลา 2 ตัวสุดท้ายออกแล้ว distinct เอานะคับ
|
 |
 |
 |
 |
Date :
2015-02-18 17:55:54 |
By :
progamer2000 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอตัวอย่าง Syntax หน่อยได้มั้ยครับ
นึกไม่ออกว่าจะตัดยังไง และวินาทีที่ห่าง คือมันไม่ได้ห่างแบบคงที่ครับ
ส่วน DISTINCT มันไว้แก้ข้อมูลที่ซ้ำกันแต่ของผมข้อมูลไม่ได้ซ้ำกันอะครับ แต่คลาดเคลื่อนกันเป็นระดับวินาที
|
 |
 |
 |
 |
Date :
2015-02-19 10:20:38 |
By :
BL@CK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
2015-02-02 08:30:00
2015-02-02 08:30:10
2015-02-02 08:30:11
2015-02-02 18:33:08
2015-02-02 18:33:09
2015-02-03 08:30:13
2015-02-03 08:30:14
2015-02-03 18:33:08
2015-02-03 18:33:11
ตัด 2 ตัวหลัง
2015-02-02 08:30
2015-02-02 08:30
2015-02-02 08:30
2015-02-02 18:33
2015-02-02 18:33
2015-02-03 08:30
2015-02-03 08:30
2015-02-03 18:33
2015-02-03 18:33
พอเอามา DISTINCT
2015-02-02 08:30
2015-02-02 18:33
2015-02-03 08:30
2015-02-03 18:33
|
 |
 |
 |
 |
Date :
2015-02-19 11:24:42 |
By :
progamer2000 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ให้ข้อมูลมาแค่นี้แล้วก็ คำถามกว้างๆ แล้วใครจะช่วยได้ละคุณ อยากให้คนอื่นช่วยก็ให้ข้อมูลเขาเยอะๆ ครับ อย่า หวง
ความหมายข้อมูลชุดแรกผมยังไม่เข้าใจเลยอะไรคือข้อมูลชุดแรก top1 ก็ไม่ใช่ แล้วมันคืออะไร ครับ งง
|
ประวัติการแก้ไข 2015-02-19 14:34:42
 |
 |
 |
 |
Date :
2015-02-19 14:31:07 |
By :
gaowteen |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ต้องรู้ gap ความกว้างของเวลาที่ชัดเจน ว่าเท่าไหร่ถือว่าเป็นชุดเดียวกัน
และคงเขียนด้วยชุดคำสั่งเดียวไม่ได้ครับ คงต้องทำเป็น stroeprocedure
หรือใช้ application ที่เขียนทำเป็น function ขึนมาตรวจสอบเช็คเอาครับ
ปล.จะว่าไปก็ทำได้อยู่นะครับ แค่ความเร็ว มันคงสู้ทำเป็น storeprocedure ไม่ได้
ปล2. และถ้า ข้อมูล1 ห่างจากข้อมูล2 ตามกำหนด
และ ข้อ2 ห่างจาก ข้อ3 ตามกำหนด
แต่ข้อ3 มันอยู่นอก gap ของข้อ1 ยังจะถือว่าเป็นชุดเดียวกันอีกไหม
รายละเอียดพวกนี้มันสำคัญในการออกแบบ ตามคุณ bird ว่าล่ะครับ มันน้อยเกิน
|
ประวัติการแก้ไข 2015-02-19 14:59:42 2015-02-19 15:13:49
 |
 |
 |
 |
Date :
2015-02-19 14:57:20 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบคุณ Bird นะครับ
2015-02-02 08:30:00 << ผมถือว่าเป็นข้อมูลชุดแรกครับ
2015-02-02 08:30:10
2015-02-02 08:30:11
2015-02-02 18:33:08 << ส่วนถ้าใช้ SELECT TOP 1 ก็จะไม่เห็นข้อมูลชุดต่อๆไปครับ
2015-02-02 18:33:09
ตอบคุณ Chaidhanan
gap ของผมในที่นี้ ถ้าห่างกันไม่เกิน 60 วินาที ถือว่าเป็นข้อมูลชุดเดียวกัน
โทษทีนะครับที่ให้ข้อมูลน้อยไป พอดีอัพโหลดรูปภาพไม่ได้
ขอบคุณสำหรับทุกความคิดเห็นนะครับ
ขอไปศึกษาเรื่อง storage Procedure แพพ
|
 |
 |
 |
 |
Date :
2015-02-19 15:39:43 |
By :
BL@CK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อัพได้ละ
ข้อมูลที่ผมวงไว้คือข้อมูลชุดแรก ส่วนตัวต่อไปที่ขีดเส้นใต้้ไว้คือตัวที่เวลาห่างกันไม่เกิน 60 วินาที
ในที่นี้คือข้อมูลชุดเดียวกันซึ่งผมไม่เอา ผมต้องการแค่ตัวที่ผมวงกลมไว้

|
ประวัติการแก้ไข 2015-02-19 16:02:44
 |
 |
 |
 |
Date :
2015-02-19 16:02:23 |
By :
BL@CK |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
และ รายการ ที่ 3 มีเหตุผลอะไร ที่ไม่เอา
|
 |
 |
 |
 |
Date :
2015-02-19 17:57:08 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
แบบนี้คงได้.........มั้ง
Code (SQL)
select * from tb_reporstlist
inner join
(select min(dtDateTime) as min_in_minute from tb_reporstlist group by CONVERT(VARCHAR(16),dtDateTime,20)) as tmp_tb
on tmp_tb.min_in_minute=tb_reporstlist.dtDateTime
|
 |
 |
 |
 |
Date :
2015-02-20 03:07:51 |
By :
ผ่านมา |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|