यदि एक शर्त तालिका में कहां स्थित है, तो क्या मुझे डुप्लीकेट परिणाम मिलेंगे? - mysql, शामिल, योग, डुप्लिकेशन

मेरे पास तीन टेबल हैं, एक कार्य है जो कार्य हैंउस कारखाने के मजदूरों को बैचों में डालकर पूरा किया जाता है, जो कि एक और तालिका है, प्रत्येक कार्य में एक बैच_आईडी है, कई कार्यों में एक ही बैच हो सकता है। तीसरी तालिका बैच_लग है जहाँ हर समय जब किसी ने बैच पर काम किया होता है तो उसे एक यूनिक आईडी, एक बैच_आईडी, व्यक्ति का उपयोगकर्ता नाम, start_time और end_time के रूप में दर्ज किया जाता है।

प्रत्येक कार्य में एक अनुमानित_ समय हैसेकंड और सेकंड में एक अनुमानित_उनका समय। मैं उन दोनों क्षेत्रों का योग प्राप्त करना चाह रहा हूं, जिन्हें ऑपरेशन_आईडी द्वारा समूहीकृत किया गया है, जो यह दर्शाने के लिए कार्य तालिका में एक क्षेत्र है कि क्या यह लेजर कटिंग, डेब्यू, पेंटिंग आदि है।

मुद्दा यह है कि मैं केवल उन कार्यों को चाहता हूं जिनमें बैच हैं जो एक time_period के दौरान batch_log में थे। बैचों के बैच_लॉग टेबल में कई प्रविष्टियाँ हैं।

यहाँ मैं कोशिश कर रहा हूँ:

SELECT
operation_id, SUM(t.estimated_nonrecurring + t.estimated_recurring) / 3600 as work_completed
FROM tasks t
INNER JOIN batch_log l on t.batch_id = l.batch_id
WHERE
l.start_time BETWEEN DATE("10:00:00") AND DATE(NOW())
AND
l.time_elapsed < "10:00:00"
GROUP BY t.operation_id

मुझे चिंता है कि मुझे वास्तविक से अधिक अनुमान मिलेगा क्योंकि कार्य तालिका में कई प्रविष्टियों में एक ही बैच हो सकता है।

उत्तर:

उत्तर № 1 के लिए 1

क्योंकि आप केवल उन कार्यों के आधार पर समय चाहते हैं जो आपके बैच लॉग फ़ाइल में थे, जो आपने पोस्ट किया था वह निश्चित रूप से काम नहीं करेगा।

मान लें कि आपके पास 3 टेबल हैं: कार्य, बैच और बैचचॉग।

आप यह चाहते हैं:

SELECT
SUM(t.estimated_nonrecurring + t.estimated_recurring) / 3600 as work_completed,
t.OperationID
FROM
Tasks t
INNER JOIN
Batches b
ON
b.BatchID = t.BatchID
INNER JOIN
BatchLog bl
ON
bl.BatchID = b.BatchID
WHERE
bl.start_time BETWEEN DATE("2011-08-01") AND DATE(NOW())
GROUP BY
t.OperationID

संबंधित सवाल
सबसे लोकप्रिय