मेरे पास ओवरव्यू और current_voltage नामक दो टेबल हैं। मैं एक टेबल आउटपुट में दो अलग-अलग तालिकाओं का शीर्ष 1 रिकॉर्ड प्राप्त करना चाहता हूं।

एसक्यूएल क्वेरी

    select top 1  VL1,VL2,VL3 from current_voltage
    where deviceimei ='233'
    order by devicetimestamp desc      
    union
    select top 1  OTI,WTI,ATI from overview
    where deviceimei ='233'
    order by devicetimestamp desc

अनुरोध करें

VL1,VL2,VL3,OTI,WTI,ATI
234,235,234,25,24,25
0
krishna mohan 4 अप्रैल 2020, 15:18

3 जवाब

एक साधारण जॉइन करेगा। ये रहा:

SELECT TOP 1 cv.VL1, cv.VL2, cv.VL3, ov.OTI, ov.WTI, ov.ATI
FROM current_voltage cv
JOIN overview ov
ON cv.deviceimei = ov.deviceimei
WHERE cv.deviceimei ='233'
ORDER BY cv.devicetimestamp DESC, ov.devicetimestamp DESC

Sql में जॉइन के बारे में अधिक पढ़ने के लिए, यह देखें।

1
Ravi Desai 4 अप्रैल 2020, 17:16

आपको 2 प्रश्नों के क्रॉस जॉइन की आवश्यकता है:

select t1.*, t2.*
from (    
    select top 1  VL1,VL2,VL3 from current_voltage
    where deviceimei ='233'
    order by devicetimestamp desc      
) t1 cross join (
    select top 1  OTI,WTI,ATI from overview
    where deviceimei ='233'
    order by devicetimestamp desc
) t2
0
forpas 4 अप्रैल 2020, 17:09

आप पार्श्व शामिल होने का भी उपयोग कर सकते हैं:

select vc.*, ov.*
from current_voltage cv cross apply
     (select top (1) ov.*
      from overview ov
      where ov.deviceimei = cv.deviceimei 
      order by ov.devicetimestamp  desc
     ) ov 
where ov.deviceimei ='233'
order by cv.devicetimestamp  desc;
0
Yogesh Sharma 4 अप्रैल 2020, 17:32