मेरे पास 'attLog' के रूप में संदर्भित एक टेबल है जिसमें एम्पीआईडी ​​​​है और उस समय के साथ-साथ जब वे काम से बाहर हो जाते हैं और सीरियल भी जो एक से गिना जाता है। मैं इसे एक तालिका के साथ जोड़ता हूं जिसे 'कर्मचारी' के रूप में जाना जाता है, लेकिन ऐसा करने पर यह मुझे शीर्ष के सबसे नज़दीकी परिणाम देता है, लेकिन मुझे सबसे हालिया या सबसे नीचे के परिणाम की आवश्यकता होती है।

Dbo.attलॉग

empID | time   | DATE      | serialNo
------+--------+-----------+----------
1001  | 5.01PM | 2020-10-1 | 1
1002  | 5.04PM | 2020-10-1 | 2
1002  | 5.02PM | 2020-10-2 | 3
1001  | 5.04PM | 2020-10-2 | 4
1002  | 5.15PM | 2020-10-2 | 5

यह परिणाम है कि जब मैं क्वेरी चलाता हूं तो मुझे मिलता है ..

डीबीओ कर्मचारी

empID | latestTime
------+-----------
1001  | 5.04PM
1002  | 5.02PM

यह वह परिणाम है जो मैं होना चाहता हूं ..

डीबीओ कर्मचारी

empID | latestTime
------+-----------
1001  | 5.04PM
1002  | 5.15PM

यहां मेरी क्वेरी है जिसका मैं उपयोग कर रहा हूं ..

UPDATE employees
SET employees.latestTime = attLog.time
FROM employees employees
INNER JOIN attLog attLog ON employees.empID = attLog.empID
WHERE attLog.authDate = '2020-10-2'

आपका बहुत बहुत धन्यवाद। कोई भी सहायताकाफी प्रशंसनीय होगी।

0
Joshua Hateley 2 नवम्बर 2020, 05:41

1 उत्तर

सबसे बढ़िया उत्तर

पहले तालिका को एकत्र करें और फिर शामिल हों:

UPDATE e
    SET e.latestTime = al.max_time
    FROM employees e JOIN
         (SELECT al.empId, MAX(al.time) as max_time
          FROM attLog al
          WHERE al.authDate = '2020-10-02'
          GROUP BY al.empId
         ) al
         ON e.empID = al.empID;
1
Gordon Linoff 2 नवम्बर 2020, 05:44