2015-11-14 5 views
0
SELECT category, SUM(price*amount); 
FROM dan2.dbf WHERE; 
    between(date_p, {^2014-01-01}, {^2014-12-31}); 
    GROUP BY category 

enter image description hereподзапросов Foxpro

Этот запрос находит сумму категорий и условия на сегодняшний день. Мне нужно найти максимум суммы (по подкатегории).

+1

В более нормальный SQL, вы можете добавить что-то вроде 'ORDER BY 2 DESC LIMIT 1' или' ORDER BY 2 DESC FETCH FIRST 1 ROW ONLY'. –

+0

Мне нужно сделать это с помощью MAX и подзапроса – Mike

+0

Но тогда у вас будет только один MAX, так что вы хотите повторить его для каждой категории? Или вы говорите о совершенно другом запросе, который возвращает MAX? –

ответ

2

Детали будут зависеть от версии VFP вы используете - в самый последний VFP 9, вы могли бы сделать что-то вроде

* create test data 
CREATE CURSOR test (id Int, category Int, price Num(15,2), amount Int, dateP D) 
INSERT INTO test VALUES (1, 2, 24.25, 15, {^2014-10-5}) 
INSERT INTO test VALUES (2, 2, 700.0, 15, {^2014-7-25}) 
INSERT INTO test VALUES (3, 2, 110.10, 210, {^2015-11-15}) 
INSERT INTO test VALUES (4, 3, 110.10, 11, {^2014-11-15}) 

* your original 
SELECT category, SUM(price*amount) ; 
    FROM test ; 
    WHERE datep Between {^2014-01-01} And {^2014-12-31} ; 
    GROUP BY category 

* your desired result w/o sub-query 
SELECT SUM(price*amount) ; 
    FROM test ; 
    WHERE datep Between {^2014-01-01} And {^2014-12-31} 

* the desired sub-query you described 
SELECT SUM(Total) ; 
    FROM (; 
     SELECT category, SUM(price*amount) As Total ; 
      FROM test ; 
      WHERE datep Between {^2014-01-01} And {^2014-12-31} ; 
      GROUP BY category ; 
      ) As subQuery 

Отредактировано:

* as per your comment 
SELECT TOP 1 category, Max(Total) ; 
    FROM (; 
     SELECT category, SUM(price*amount) As Total ; 
      FROM test ; 
      WHERE datep Between {^2014-01-01} And {^2014-12-31} ; 
      GROUP BY category ; 
      ) As subQuery ; 
    GROUP BY 1 ; 
    ORDER BY 2 Desc 
+0

Нет. Мне нужен внешний запрос для получения MAX этих строк (не SUM), то есть 38840 в моем примере и 10863.75 в вашем – Mike

+0

Да, я использую VFP9 – Mike

+0

Спасибо, это правильно. Это единственное возможное решение? Можно ли сделать это без «ORDER BY»? – Mike

1

Мне нужно найти максимум суммы

Вы можете легко получить максимальные значения суммы на si ngle query и используя ORDER DESC для запроса, а затем получить значение TOP.

SELECT category, 
SUM(price*amount) AS Sum_Val; 
FROM dan2.dbf WHERE; 
between(date_p, {^2014-01-01}, {^2014-12-31}); 
GROUP BY category 
ORDER BY 2 DESC 
INTO CURSOR TmpResults 

SELECT TmpResults 
GO TOP 
MaxSum = TmpResults.Sum_Val 

Good Luck