2009-07-11 14 views
5

में निहित नहीं है, स्पष्ट रूप से, जब ग्रुप द्वारा क्लॉज का उपयोग किया जाता है, कॉलम जो कुल फ़ंक्शन नहीं होते हैं, समूह द्वारा समूह का हिस्सा होना चाहिए। यहां समस्या यह है कि, मैं GROUP BY खंड में HTTPADDRESS & DATEENTERED कॉलम नहीं रख सकता। इसके अलावा, मुझे एक ऐसा फ़ंक्शन नहीं पता जो मुझे सभी की नवीनतम प्रविष्टियां देगा।कॉलम चयनित सूची में अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज

संपादित करें: मैं एसक्यूएल-सर्वर का उपयोग करता हूं। अगर मैं एक्सेस का उपयोग कर रहा था तो मैं अंतिम समारोह का उपयोग करूंगा।

SQL = "SELECT VISITORIP, HTTPADDRESS, DATEENTERED" 
SQL = SQL & " FROM STATS" 
SQL = SQL & " WHERE DATEENTERED BETWEEN '" & OnlineTime & "' AND '" & NOW() & "'" 
SQL = SQL & " GROUP BY VISITORIP" 
SQL = SQL & " ORDER BY DATEENTERED DESC" 
Set objOnVisitors = objConn.Execute(SQL)  

उत्तर

13

आप के लिए है वापस आत्म में शामिल होने:

WITH LASTVISIT AS (
    SELECT VISITORIP, MAX(DATEENTERED) AS DATEENTERED 
    FROM STATS 
    WHERE DATEENTERED BETWEEN @STARTTIME AND @ENDTIME 
    GROUP BY VISITORIP 
) 
SELECT STATS.VISITORIP, STATS.HTTPADDRESS, STATS.DATEENTERED 
FROM STATS 
INNER JOIN LASTVISIT 
    ON LASTVISIT.VISITORIP = STATS.VISITORIP 
    AND LASTVISIT.DATEENTERED = STATS.DATEENTERED 
ORDER BY STATS.DATEENTERED DESC 

ध्यान दें, यह मान लिया गया है किसी दिए गए VISITORIP रेंज में एक अनन्य अधिकतम DATEENTERED होगा।

+0

यदि मैं HTTPADDRESS और DATEENTERED पर MAX का उपयोग करता हूं तो क्या होगा? –

+0

आईपी की सटीक डेटाटाइम पर दो विज़िट होने की तुलना में संभावित रूप से अधिक गलत है जो उनका अंतिम है। MAX (HTTPADDRESS) और MAX (DATEENTERED) समूह पर संभावित रूप से स्वतंत्र रूप से अधिकतम हैं। उदाहरण के लिए, यदि उपयोगकर्ता http://www.abc.com/page2.htm और फिर http://www.abc.com/page1.htm पर जाता है, तो अधिकतम पता पहला पृष्ठ होगा, लेकिन अधिकतम समय होगा दूसरी यात्रा हो। –

+0

+1 नहीं क्योंकि यह मेरी समस्या को हल करता है, लेकिन स्वयं से जुड़े विचार ने मेरी समस्या को हल करने के लिए एक और विचार उड़ाया। –

संबंधित मुद्दे