मेरे पास कई जुड़ने के साथ एक प्रश्न है और मैं इससे नवीनतम क्लाइंट रिकॉर्ड चुनने का प्रयास कर रहा हूं। मेरे पास यह प्रश्न है लेकिन यह मुझे क्लाइंट के सभी रिकॉर्ड दे रहा है:
EDIT:
SELECT ca.CA_ID, ca.CLIENT_ID, ca.CA_STATUS_TYPE, ca.CREATED_BY, MAX(ca.CREATED_DATE), ca.UPDATED_BY, MAX(ca.UPDATED_DATE), ca.CA_REFERENCE_NUMBER,
cl.SOURCE_SYSTEM_CODE, catchment.EST_CATCHMENT_AREA, catchment.SERVICE_PROVIDER_NAME, sds.SDS_NAME, sds.SDS_ADDRESS_TEXT, u.CA_USER_TYPE "USER TYPE",
CASE WHEN ca.REFERRED_IND = 1 THEN 'REFERRED' ELSE 'NOT REFERRED' END REFER_TYPE
FROM CA ca
JOIN(
SELECT TOP 1
CLIENT_ID, MAX(CREATED_DATE) CREATED_DATE
FROM CA
GROUP BY
CLIENT_ID
ORDER BY
MAX(CREATED_DATE)
) maxclient
ON maxclient.CLIENT_ID = ca.CLIENT_ID
AND maxclient.CREATED_DATE = ca.CREATED_DATE
LEFT JOIN CLIENT cl
ON ca.CLIENT_ID = cl.CLIENT_ID
LEFT JOIN (
SELECT * FROM CATCHMENT_AREA catchment LEFT JOIN SERVICE_PROVIDER sp ON sp.SERVICE_PROVIDER_ID = catchment.SERVICE_PROVIDER_ID
) catchment ON ca.CATCHMENT_ID = catchment.CATCHMENT_ID
LEFT JOIN SERVICE_DELIVERY_SITE sds
ON ca.SERVICE_DELIVERY_SITE_ID = sds.SERVICE_DELIVERY_SITE_ID
LEFT JOIN USER u
ON ca.CREATED_BY = u.CA_USER_ID
WHERE (ca.CREATED_DATE) BETWEEN TO_DATE('2021-01-04', 'yyyy-mm-dd') AND TO_DATE('2021-01-08', 'yyyy-mm-dd')
2 जवाब
Oracle में शीर्ष खंड नहीं है:
यदि आप सभी est_ca_client_id से अधिकतम निर्मित तिथि चाहते हैं तो आप करते हैं:
select est_ca_client_id, max(created_date) created_date
from ca_cdr.est_ca
group by est_ca_client_id
लेकिन अगर आप create_date से अंतिम est_ca_client_id चाहते हैं, तो यह मानते हुए कि आपके पास उसी सेकंड में क्लाइंट नहीं हैं, आप कुछ ऐसा कर सकते हैं:
select est_ca_client_id
from ca_cdr.est_ca
where created_date = (select max(created_date)
from ca_cdr.est_ca)
यहां बताया गया है कि आप प्रत्येक क्लाइंट के लिए नवीनतम रिकॉर्ड कैसे प्राप्त करते हैं:
SELECT
ca.CA_ID
, ca.CLIENT_ID
, ca.STREAM
, ca.CA_STATUS_TYPE_CODE
, ca.CREATED_BY
, MAX(ca.CREATED_DATE)
, ca.UPDATED_BY
, MAX(ca.UPDATED_DATE)
, ca.REFERENCE_NUMBER
, ca.CATCHMENT_AREA_ID
, ca.SERVICE_DELIVERY_SITE_ID
, cl.SOURCE_SYSTEM
, catchment.EST_CATCHMENT_AREA
, catchment.SERVICE_PROVIDER_NAME
, sds.SDS_NAME
, sds.SDS_ADDRESS_TEXT
, u.CA_USER_TYPE "USER TYPE"
, CASE
WHEN ca.REFERRED_IND = 1 THEN 'REFERRED'
ELSE 'NOT REFERRED'
END REFER_TYPE
FROM
ca_table ca
JOIN
(
SELECT TOP 1
CLIENT_ID
, MAX(CREATED_DATE) CREATED_DATE
FROM
ca_table
GROUP BY
CLIENT_ID
ORDER BY
MAX(CREATED_DATE)
) maxclient
ON maxclient.CLIENT_ID = ca.CLIENT_ID
AND maxclient.CREATED_DATE = ca.CREATED_DATE
LEFT JOIN client_table cl
ON ca.CLIENT_ID = cl.CLIENT_ID
LEFT JOIN
(
SELECT
*
FROM
CA_CATCHMENT_AREA catchment
LEFT JOIN CA_SERVICE_PROVIDER sp
ON sp.SERVICE_PROVIDER_ID = catchment.SERVICE_PROVIDER_ID
) catchment
ON ca.CATCHMENT_AREA_ID = catchment.CATCHMENT_AREA_ID
LEFT JOIN SERVICE_DELIVERY_SITE sds
ON ca.SERVICE_DELIVERY_SITE_ID = sds.SERVICE_DELIVERY_SITE_ID
LEFT JOIN user_table u
ON ca.CREATED_BY = u.CA_USER_ID
WHERE
ca.CREATED_DATE BETWEEN TO_DATE('2021-01-04', 'yyyy-mm-dd') AND TO_DATE('2021-01-08', 'yyyy-mm-dd')
यदि आपको अंतिम रिकॉर्ड चुनने से पहले तिथि को फ़िल्टर करने की आवश्यकता है, तो आपको 'मैक्सक्लाइंट' की सबक्वायरी के अंदर जहां क्लॉज को स्थानांतरित करना होगा
oracle
का उपयोग कर रहे हैं, आपने प्रश्न को MySQL के रूप में क्यों टैग किया
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।