 |
อยากสอบถามเรื่องการหาช่วงเวลา ที่มากที่สุดครับ ขอคำแนะนำทีครับผม... |
|
 |
|
|
 |
 |
|
คำนวนเป็นวันๆไปหรอครับ หรือว่าข้ามวัน หรือว่า แถว ต่อ แถวไปเรื่อยๆ 1- 2 , 2-3 แบบนี้ครับ 
|
 |
 |
 |
 |
Date :
2014-04-30 11:39:19 |
By :
Manussawin |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตำนวนแบบ ข้ามวันครับ
|
 |
 |
 |
 |
Date :
2014-04-30 12:34:14 |
By :
เค |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเป็นผมผมจะเก็บ เป็น timestamp นะครับ
เพราะมันคำนวณ หาเวลาจอดง่าย เวลาจะแสดงผล ค่อยแปลงค่าจาก timestamp กลับไปเป็น date ครับ
อีกเรื่องนึงผมว่า database มันควรจะมีเวลาเข้า และ เวลาออก อยู่ใน 1 field นะครับเช่น
id_car license_plate check_in check_out
1 1กข-8080 1398837044 1398839214
|
 |
 |
 |
 |
Date :
2014-04-30 12:51:34 |
By :
zinlucifer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
เสริมว่า อาจไม่ต้องเก็บเป็น timestamp ก็ได้ครับ...เก็บ date/time แบบปกติ
แต่เวลานำมาใช้งาน ให้ใช้ timestamp เป็นตัวจัดการ เรื่องคำนวณระยะเวลา
ให้ศึกษาการใช้งาน timestamp ว่าคืออะไร แล้วจะเข้าใจ เพิ่มขึ้นครับ  
|
 |
 |
 |
 |
Date :
2014-04-30 13:21:51 |
By :
apisitp |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าเก็บแบบ timestamp จะคำนวนได้แบบไหนบ้างครับ
ขอตัวอย่างสัก code ได้ไหมเอ่ยยย ผมจะได้มองภาพออกอะครับ
|
 |
 |
 |
 |
Date :
2014-04-30 13:26:53 |
By :
เค |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
จับ timestamp ลบกันตรงๆเลยครับเช่น
1398839214 - 1398837044 = 2170
เท่ากับจอดไป 2170 วินาที
แปลงเป็น นาทีก็ หาร 60 แปลงเป็นชม 120 ครับ
วิธีที่ท่าน Doctor K กล่าวก็ดีนะครับ database เราจะดู friendly มากขึ้น
php มี function ที่ใช้ในการ convert date To timestamp และ timestamp To date อยู่แล้วครับลองศึกษาดูนะ 
|
 |
 |
 |
 |
Date :
2014-04-30 14:04:39 |
By :
zinlucifer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ไม่แน่ใจว่าตอบตรงคำถามหรือเปล่านะครับ
ช่วงเวลาที่รถจอดนานมากที่สุด คือช่วงที่ผลลัพธ์ จากการลบกันของ timestamp มากที่สุดครับ
เช่น
รถคันที่หนึ่ง จอดไป 3000 วินาที
รถคันที่สอง จอดไป 3500 วินาที
หมายความว่า ช่วงเวลาที่รถคันที่สอง มีการจอดมากกว่า ช่วงเวลาของคันที่หนึ่ง ครับ
ลองยกตัวอย่าง ข้อมูลใน ดาต้าเบส มา 1 ชุดครับ แล้วจาก input ชุด นั้น output ที่ถูกต้องจะมีหน้าตาเป็นอย่างไร
จะช่วยให้เข้าใจความหมายได้มากขึ้นครับ
|
 |
 |
 |
 |
Date :
2014-04-30 15:39:24 |
By :
zinlucifer |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 8 เขียนโดย : zinlucifer เมื่อวันที่ 2014-04-30 15:39:24
รายละเอียดของการตอบ ::
สิ่งที่ผมทำคือ การดูรายงาน การจอดรถ ของรถแต่ละคันครับ
เช่น
ช่วงเวลาที่รถจอด (สมมุติว่ารถคันนี้ชื่อว่า A)
2014-04-10 10:05:17
2014-04-10 10:05:21
2014-04-10 10:05:48
2014-04-10 10:44:52
2014-04-10 10:51:52
2014-04-10 10:52:52
2014-04-10 10:55:53
2014-04-10 10:58:53
2014-04-10 10:59:53
2014-04-10 11:00:53
2014-04-10 11:01:53
2014-04-10 12:12:53
2014-04-11 11:28:55
2014-04-11 11:47:57
2014-04-11 11:48:57
2014-04-11 11:49:57
ผมจะหาว่ารถคันที่ชื่อ A นี่ มีช่วงเวลาไหน จอดนานที่สุดครับ
เช่นผมเลือกช่วงเวลาที่ดูรายงานคือ วันที่ 2014-04-10 - 2014-04-11
สิ่งที่ผมอยากทราบคือ ระหว่างวันที่ 2014-04-10 - 2014-04-11 มีช่วงเวลาไหนจอดรถมากที่สุด
ขอบคุณครับ..
|
 |
 |
 |
 |
Date :
2014-04-30 15:53:47 |
By :
K |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
!!แก้ไขครับ
ผมจะหาว่ารถคันที่ชื่อ A นี่ มีช่วงเวลาไหน จอดนานที่สุดครับ โดยเลือกดูแค่รถคันเดียว
เช่นผมเลือกช่วงเวลาที่ดูรายงานคือ วันที่ 2014-04-10 - 2014-04-11
สิ่งที่ผมอยากทราบคือ ระหว่างวันที่ 2014-04-10 - 2014-04-11 มีช่วงเวลาไหนจอดรถนานที่สุด
ขอบคุณครับ..
|
 |
 |
 |
 |
Date :
2014-04-30 15:55:16 |
By :
เค |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเคยทำงานเป็นลูกน้องของท่าน ชูวิทย์ กมลเบอร์ห้า
เคยเขียนแบบนี้ครับ
Code
*!* Time Period 09.00 - 18.59 = SUM(x)
*!* Time Period 19.00 - 08.59 = SUM(y)
FUNCTION JimFavorHot2(dtStart As DateTime, dtEnd As DateTime)
LOCAL h, mTotal1, mTotal2 As Integer
STORE 0 TO h, mTotal1, mTotal2
SET CENTURY ON && 2014
SET DATE YMD && 2014-12-31
SET HOURS TO 24 && 00:59 - 23:59
DO WHILE dtStart < dtEnd
h = HOUR(dtStart)
IF h >=9 AND h < 19 THEN
mTotal1 = mTotal1 + 1 && Minutes Mesure (Count)
ELSE
mTotal2 = mTotal2 + 1 && Minutes Mesure (Count)
ENDIF
dtStart = dtStart + 60 && Add 1 Minutes
ENDDO
RETURN LTRIM(STR(INT(mTotal1/60))) + ":" + PADL(INT(MOD(mTotal1, 60)), 2, "0") + "@" + ;
LTRIM(STR(INT(mTotal2/60))) + ":" + PADL(INT(MOD(mTotal2, 60)), 2, "0") + "@"
END FUNCTION
หรือลองแบบนี้ดู (ไม่แน่ใจว่าจะได้หรือไม่)
Code (SQL)
SELECT COUNT(CASE WHEN DATEPART(hour, IN_Date) BETWEEN 1 AND 2 THEN 1 ELSE 0 END ) AS '1 - 2',
SELECT COUNT(CASE WHEN DATEPART(hour, IN_Date) BETWEEN 3 AND 4 THEN 1 ELSE 0 END ) AS '3 - 4'
...
...
...
FROM yourTable WHERE IN_Date BETWEEN '2014-04-10' AND '2014-04-11'
Good Luck.
|
 |
 |
 |
 |
Date :
2014-04-30 17:02:14 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
วันก่อน 2014-05-05 เป็นวันมงคล
--- ผมดีใจ ผมเลยเขียน SQL Query เล่นฯ ค่าเสื่อมราคาทรัพย์สิน
มาวันนี้ 2014-05-07 10:20:00.000 ผมได้เอกสารระบบ AR (ลูกหนี้) จากคนคนหนึ่ง
--- ไม่นึกไม่ฝัน ผมเลยเขียน SQL Query เล่นฯ

Code (SQL)
SELECT ExactStartTime, ExactEndTime, This_is_a_chair
FROM CLR.Mymind(@myFunction, 30) -- 1/2 Hours.
ORDER BY ExactStartTime ASC
[x] AR/AP ---> GL (ERP) แต่ผมแกล้งไม่รับรู้ไปงั้นแหละครับ (สนุกฯไปวันวัน)
|
 |
 |
 |
 |
Date :
2014-05-07 12:57:19 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (SQL)
SELECT MAX(This_is_a_chair) As MaxPlate FROM
(
SELECT ExactStartTime, ExactEndTime, This_is_a_chair
FROM CLR.Mymind(@myFunction, 30) -- 1/2 Hours. (Interval 30 minute.)
ORDER BY ExactStartTime ASC
) a
|
 |
 |
 |
 |
Date :
2014-05-07 13:12:38 |
By :
love9713 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|