Sql K、 我认为这是我能做的最好的了。现在应该最好地表示联接的关系。 SELECT t1.field1, t1.field2, t1.field3, t1.field4, t1.field5,

Sql K、 我认为这是我能做的最好的了。现在应该最好地表示联接的关系。 SELECT t1.field1, t1.field2, t1.field3, t1.field4, t1.field5, ,sql,oracle,aggregate-functions,Sql,Oracle,Aggregate Functions,K、 我认为这是我能做的最好的了。现在应该最好地表示联接的关系。 SELECT t1.field1, t1.field2, t1.field3, t1.field4, t1.field5, t1.field6, t1.field7, t1.field8, t2.field1, t2.field2, t2.field3, t2.field4,

K、 我认为这是我能做的最好的了。现在应该最好地表示联接的关系。
SELECT t1.field1,
       t1.field2,
       t1.field3,
       t1.field4,
       t1.field5,
       t1.field6,
       t1.field7,
       t1.field8,
       t2.field1,
       t2.field2,
       t2.field3,
       t2.field4,
       t2.field5,
       t2.field6,
       t2.field7,
       t2.field8,
       t2.field9,
       t3.field1,
       t4.field1,
       t5.field1,
       SUM(t6.field1),
       MIN(t6.THEDATE) 

  FROM table1 t1
    LEFT JOIN table2 t2
      ON t1.field2 = t2.sameFieldName
      LEFT JOIN table3 t3
        ON t2.field9 = t3.sameFieldName
        LEFT JOIN table4 t4
          ON t1.field2 = t4.sameFieldName
          AND t2.field1 = t4.sameFieldName
          LEFT JOIN table5 t5
            ON t4.field1 = t5.sameFieldName
            LEFT JOIN table6 t6
              ON t4.field1 = t6.sameFieldName
              AND t4.colName1 = t6.sameFieldName

  WHERE t6.THEDATE BETWEEN SYSDATE - 70 AND SYSDATE - 50
    AND t1.field2 = 'SUBMIT'
    AND t1.field3 LIKE 'H%'

  GROUP BY t1.field1,
           t1.field2,
           t1.field3,
           t1.field4,
           t1.field5,
           t1.field6,
           t1.field7,
           t1.field8,
           t2.field1,
           t2.field2,
           t2.field3,
           t2.field4,
           t2.field5,
           t2.field6,
           t2.field7,
           t2.field8,
           t2.field9,
           t3.field1,
           t4.field1,
           t5.field1;
SELECT *, sum(somthing), min(theDate)
FROM Table
WHERE min(theDate) BETWEEN SYSDATE - 70 AND SYSDATE - 50
GROUP BY <<<ALL GROUP COLUMNS>>>
SELECT a.*, sum(something), min(theDate)
  FROM table_name a
 GROUP BY <<list of columns in a>>
HAVING min(theDate) BETWEEN sysdate - 70 AND sysdate - 50
SELECT * FROM
(
SELECT *, sum(somthing) over(), row_number() over (order by theDate) as rn
FROM Table
WHERE theDate BETWEEN SYSDATE - 70 AND SYSDATE - 50
)
WHERE rn = 1;
SELECT *, sum(somthing), min(theDate)
FROM Table t
WHERE NOT EXISTS (SELECT 1 FROM table t2 WHERE . . . AND t2.thedate < SYSDATE - 70) AND
      EXISTS (SELECT 1 FROM table t2 WHERE . . . AND t2.thedate <= sysdate - 50)
GROUP BY *
EMP (EMP_ID*, DEPT_ID, DEPT_NAME, SAL, THEDATE)
EMP(EMP_ID*, DEPT_ID, SAL, THEDATE)
DEPT(DEPT_ID*, DEPT_NAME)

"Table" == EMP JOIN DEPT USING (DEPT_ID)
SELECT DEPT_ID, DEPT_NAME, SUM(SAL), MIN(THEDATE)
FROM   EMP
GROUP BY DEPT_ID, DEPT_NAME
HAVING MIN(THEDATE) >= SYSDATE-70 AND MIN(THEDATE) < SYSDATE-50;
SELECT DEPT_ID, MAX(DEPT_NAME) DEPT_NAME, SUM(SAL), MIN(THEDATE)
FROM   EMP USING (DEPT_ID)
GROUP BY DEPT_ID
HAVING MIN(THEDATE) >= SYSDATE-70 AND MIN(THEDATE) < SYSDATE-50;
SELECT  DEPT_ID, DEPT_NAME, SUM(SAL), MIN(THEDATE)
FROM    EMP E1
WHERE   NOT EXISTS 
            (SELECT 1 FROM EMP E2 
             WHERE E2.DEPT_ID = E1.DEPT_ID 
                   AND E2.DEPT_NAME=E1.DEPT_NAME
                   AND E2.THEDATE < SYSDATE - 70)
        AND EXISTS
            (SELECT 1 FROM EMP E2 
             WHERE E2.DEPT_ID = E1.DEPT_ID 
                   AND E2.DEPT_NAME=E1.DEPT_NAME
                   AND E2.THEDATE BETWEEN SYSDATE-70 AND SYSDATE - 50)
       AND E1.THEDATE >= SYSDATE -70
GROUP BY DEPT_ID, DEPT_NAME;
SELECT  DEPT_ID, MAX(DEPT_NAME) DEPT_NAME, SUM(SAL), MIN(THEDATE)
FROM    EMP E1
WHERE   NOT EXISTS 
            (SELECT 1 FROM EMP E2 
             WHERE E2.DEPT_ID = E1.DEPT_ID 
                   AND E2.THEDATE < SYSDATE - 70)
        AND EXISTS
            (SELECT 1 FROM EMP E2 
             WHERE E2.DEPT_ID = E1.DEPT_ID 
                   AND E2.THEDATE BETWEEN SYSDATE-70 AND SYSDATE - 50)
       AND E1.THEDATE >= SYSDATE -70
GROUP BY DEPT_ID;