กระทู้เก่าบอร์ด อ.Yeadram
2,066 12
URL.หัวข้อ /
URL
วันที่ ที่บันทึกครั้งที่แล้ว
บันทึกข้อมูลที่มีวันที่ และข้อมูลอื่น
ดังนี้
วันที่ ข้อมมูล
1/1/2556 .........
2/1/2556 .........
3/1/2556 .........
3/1/2556 .........
4/1/2556 .........
5/1/2556 .........
6/1/2556 .........
เราสามารถเขียน Query ให้ออกแบบนี้ได้มั้ยครับ
วันที่ ข้อมมูล วันที่บันทึกครั้งที่แล้ว
1/1/2556 .........
2/1/2556 ......... 1/1/2556
3/1/2556 ......... 2/1/2556
3/1/2556 ......... 3/1/2556
4/1/2556 ......... 3/1/2556
5/1/2556 ......... 4/1/2556
6/1/2556 ......... 5/1/2556
ดังนี้
วันที่ ข้อมมูล
1/1/2556 .........
2/1/2556 .........
3/1/2556 .........
3/1/2556 .........
4/1/2556 .........
5/1/2556 .........
6/1/2556 .........
เราสามารถเขียน Query ให้ออกแบบนี้ได้มั้ยครับ
วันที่ ข้อมมูล วันที่บันทึกครั้งที่แล้ว
1/1/2556 .........
2/1/2556 ......... 1/1/2556
3/1/2556 ......... 2/1/2556
3/1/2556 ......... 3/1/2556
4/1/2556 ......... 3/1/2556
5/1/2556 ......... 4/1/2556
6/1/2556 ......... 5/1/2556
12 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R16195
ตารางผมเป็นตารางเก่า มีเรคคอดแล้วประมาณ หลายร้อยเรคคอด
แต่ก็จะลอทำแบบอาจารย์ก่อน ดูแล้วคิดซับซ้อนมาก เดี๋ยวเวลาแก้จำไม่ได้
ขอลองทำดูก่อนครับอาจารย์ ขอบพระคุณครับ
แต่ก็จะลอทำแบบอาจารย์ก่อน ดูแล้วคิดซับซ้อนมาก เดี๋ยวเวลาแก้จำไม่ได้
ขอลองทำดูก่อนครับอาจารย์ ขอบพระคุณครับ
3 @R16196
แก้ไข
TTT: DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
จริงๆ เป็น เท่ากันแล้วลบ 1 ก็ได้แล้วครับ
ปล. วิธีนี้ถือว่าง่ายสุดแล้วนะครับ เท่าที่คิดได้นะ ตรงไปตรงมาไม่ซับซ้อนครับ คือแค่เพิ่มฟิลด์ใหม่ในตารางเป็น AutoNumber มันก็รันเลขให้เสร็จอยู่แล้ว จากนั้นเพิ่มฟิลด์ที่คิวรี่
วันที่บันทึกครั้งที่แล้ว: DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
แค่นี้เองครับ แต่สำรองข้อมูลก่อนทำทุกครั้งนะครับ
TTT: DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
จริงๆ เป็น เท่ากันแล้วลบ 1 ก็ได้แล้วครับ
ปล. วิธีนี้ถือว่าง่ายสุดแล้วนะครับ เท่าที่คิดได้นะ ตรงไปตรงมาไม่ซับซ้อนครับ คือแค่เพิ่มฟิลด์ใหม่ในตารางเป็น AutoNumber มันก็รันเลขให้เสร็จอยู่แล้ว จากนั้นเพิ่มฟิลด์ที่คิวรี่
วันที่บันทึกครั้งที่แล้ว: DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
แค่นี้เองครับ แต่สำรองข้อมูลก่อนทำทุกครั้งนะครับ
4 @R16197
NZ(DMax("[วันที่]","[Table1]","[วันที่] < " & Format([วันที่],"#yyyy/mm/dd#"),"")
ประมาณนี้ครับ
ประมาณนี้ครับ
5 @R16204
เห็นของ อ.พิชัย ดูง่ายกว่านะ ลองทำดู มันไม่ออกเลย ทั้งที่ดูแล้ว น่าจะได้
แต่มันกับออกมาเป็น Null
แต่มันกับออกมาเป็น Null
6 @R16211
จากแนวคิด อ.พิชัย ผมทำเป็น Runningsum ได้แล้วครับ
โพสโคสไม่ได้
โพสโคสไม่ได้
7 @R16220
ถ้าตามนั้น จะแสดงผลลัพธ์ในบรรทัด 3/1/2556 ......... 3/1/2556 ไม่ได้นะครับ
8 @R16221
โหอาจารย์ นับถือจริงๆ ผมโพสผิด อาจารย์ยังเก็บรายละเอียด
ผลลลัพธ์มันออกมาแบบนี้ครับ
วันที่ ข้อมมูล วันที่บันทึกครั้งที่แล้ว
1/1/2556 .........
2/1/2556 ......... 1/1/2556
3/1/2556 ......... 2/1/2556
3/1/2556 ......... 2/1/2556
4/1/2556 ......... 3/1/2556
5/1/2556 ......... 4/1/2556
6/1/2556 ......... 5/1/2556
ผลลลัพธ์มันออกมาแบบนี้ครับ
วันที่ ข้อมมูล วันที่บันทึกครั้งที่แล้ว
1/1/2556 .........
2/1/2556 ......... 1/1/2556
3/1/2556 ......... 2/1/2556
3/1/2556 ......... 2/1/2556
4/1/2556 ......... 3/1/2556
5/1/2556 ......... 4/1/2556
6/1/2556 ......... 5/1/2556
9 @R16222
อื่ม! คือจริงๆ ผมว่าจะบ่อยผ่านแล้วนะครับ เพราะในเมื่อเจ้าของกระทู้ เค้ายืนยันว่าได้ตามต้องการแล้ว แต่คิดอีกทีเผื่อคนอื่นผ่านมาอ่านแล้วคิดว่าทั้งสองวิธีเหมือนกัน และ อ.สันติสุข ก็ทักมา ก็เลยขอขยายความซักหน่อยครับ
10 @R16223
* จะเป็นการแสดงค่า [วันที่] ในวันก่อนหน้าเสมอ จะไม่มีทางแสดงวันเดียวกันได้ เช่น หากมีคนเพิ่มเรคคอร์ดในวันเดียวกันก่อนหน้าผม แล้วผมค่อยมาเพิ่มอีกเรคคอร์ด ในช่อง วันที่บันทึกครั้งที่แล้ว ผมจะไม่รู้เลยว่าวันนี้มีคนบันทึกเรคคอร์ดก่อนหน้าผม เพราะมันจะแสดงแค่เมื่อวาน หรือวันก่อนหน้าเท่านั้น ซึ่งจะไม่ตรงกับความเป็นจริง ถ้าตัวอย่างคือกรณี วันที่ซ้ำกันได้
แบบที่ 2.
DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
หรือเขียนเป็น subquery
(SELECT [วันที่] FROM Table1 AS a WHERE a.[ID] = [Table1].[ID]-1)
* หากเรายอมสร้าง ID ประเภท AutoNumber จะแก้ปัญหาแบบแรกได้ คือหากมีการเพิ่มเรคคอร์ดก่อนหน้าเราในวันเดียวกันมันจะแสดงให้เรารู้ว่าวันนี้การเรคคอร์ดเพิ่มก่อนหน้าเรา
- ความต่างก็ประมาณนี้ครับ
ปล. ทั้ง 2 แบบมีข้อจำกัดต่างกันครับ ต้องเข้าใจความต้องการผลลัพธ์ตัวเองก่อนใช้ด้วยนะครับ ไม่งั้นจะมีปัญหาภายหลังได้ครับ
* จะเป็นการแสดงค่า [วันที่] ในวันก่อนหน้าเสมอ จะไม่มีทางแสดงวันเดียวกันได้ เช่น หากมีคนเพิ่มเรคคอร์ดในวันเดียวกันก่อนหน้าผม แล้วผมค่อยมาเพิ่มอีกเรคคอร์ด ในช่อง วันที่บันทึกครั้งที่แล้ว ผมจะไม่รู้เลยว่าวันนี้มีคนบันทึกเรคคอร์ดก่อนหน้าผม เพราะมันจะแสดงแค่เมื่อวาน หรือวันก่อนหน้าเท่านั้น ซึ่งจะไม่ตรงกับความเป็นจริง ถ้าตัวอย่างคือกรณี วันที่ซ้ำกันได้
แบบที่ 2.
DLookUp("[วันที่]","[Table1]","[ID] =" & [ID]-1)
หรือเขียนเป็น subquery
(SELECT [วันที่] FROM Table1 AS a WHERE a.[ID] = [Table1].[ID]-1)
* หากเรายอมสร้าง ID ประเภท AutoNumber จะแก้ปัญหาแบบแรกได้ คือหากมีการเพิ่มเรคคอร์ดก่อนหน้าเราในวันเดียวกันมันจะแสดงให้เรารู้ว่าวันนี้การเรคคอร์ดเพิ่มก่อนหน้าเรา
- ความต่างก็ประมาณนี้ครับ
ปล. ทั้ง 2 แบบมีข้อจำกัดต่างกันครับ ต้องเข้าใจความต้องการผลลัพธ์ตัวเองก่อนใช้ด้วยนะครับ ไม่งั้นจะมีปัญหาภายหลังได้ครับ
11 @R16224
แก้ไขรูปครับ
12 @R16225
ขอบคุณ อาจารย์ TTT ครับ ผมก็ใช้วิธีที่อาจารย์เคยทำให้เก่าๆ อะครับ โพสไปตอนแรก อธิบายยาวมาก พอโพส มันบอกเป็นสแปมซะงั้น เลยโพสใหม่ สั้นๆ
ที่ไม่ใช้วิธีอาจารย์ TTT เพราะว่า ฟิลด์ Aouto number มีอยุ่แล้วครับ แต่ปัญหาคือไม่ได้เรียงตามวัน เพราะสามารถ ย้อนกลับไปคีวันก่อนหน้าได้ ทำให้อีกวิธีดูจะง่ายกว่า ผมนึกรูปแบบวิธีคิดไม่ออก พอ อาจารย์พิชัยโพสบอก ก็เลยเอา มาผสมกันจนได้แบบที่ต้องการครับ ขอบพระคุณ อาจารย์ทั้ง 3 ครับตอนนี้ผมกำลังหัดทำ Query แปลกๆ แบบนี้เพื่อพัฒนาไปเรื่อยๆ ครับ
ที่ไม่ใช้วิธีอาจารย์ TTT เพราะว่า ฟิลด์ Aouto number มีอยุ่แล้วครับ แต่ปัญหาคือไม่ได้เรียงตามวัน เพราะสามารถ ย้อนกลับไปคีวันก่อนหน้าได้ ทำให้อีกวิธีดูจะง่ายกว่า ผมนึกรูปแบบวิธีคิดไม่ออก พอ อาจารย์พิชัยโพสบอก ก็เลยเอา มาผสมกันจนได้แบบที่ต้องการครับ ขอบพระคุณ อาจารย์ทั้ง 3 ครับตอนนี้ผมกำลังหัดทำ Query แปลกๆ แบบนี้เพื่อพัฒนาไปเรื่อยๆ ครับ
Time: 0.2506s
แล้วใช้ฟังก์ชั่น DLookup() เป็นวิธีคล้ายๆกับที่ผมเคยทำในไฟล์ตัวอย่างแสดงรูปภาพแนวนอน หากเคยโหลดไปดู
TTT: DLookUp("[วันที่]","[Table1]","[ID] >" & [ID]-2)
แต่ข้อจำกัดคือ ID ต้องเรียงกัน ห้ามข้าม