2010-09-21 2 views
0

я есть таблица следоватьсчетчик имеет состояние в Foxpro

id name date 
1 a 08/09/2003 
2 b 02/03/2003 
3 c 10/08/2004 
4 c 25/08/2007 
5 a 01/01/2008 

я хочу рассчитывать базу данных. с таблицей ниже с результатом наблюдения:

2003 = 2 
2004 = 1 
2007 = 0 because c has in 2004-year 
2008 = 0 because a has in 2003-year 

ответ

1

первых, получить имя и самый ранний год он появляется в:

select name, min(year(date)) as year from table 
group by name into cursor temp 

Тогда получите счет внутри этого года:

select count(table.name) 
from table join temp on table.name = temp.name 
and year(table.date) = temp.year 
+0

большое вам спасибо. – maolddv

1

Я могу решить другую проблему, но этот код дает количество в год для имен, которые не появились в предыдущие годы:

*-- Get the firstyear for each name 
Select Name, Min(Year(Date)) As firstyear ; 
    From table1; 
    Group By Name Into Cursor temp1 

*-- Get the year of the date for each entry 
Select Id, Name, Year(Date) As yr From table1 Into Cursor temp2 

*-- Identify those rows that appear for the first time 
Select temp2.*, temp1.firstyear, Iif(temp2.yr = temp1.firstyear, 1, 0) As countme ; 
    FROM temp2 INNER Join temp1 ; 
    ON temp2.Name = temp1.Name Into Cursor temp3 

*-- Add up the "CountMe" fields to get the sum. 
Select yr, Sum(countme) From temp3 Group By yr 
+0

спасибо! но это ошибка «В курсор». Не удается закончить. – maolddv

+0

спасибо! я сделал успех. – maolddv

0

*/Во-первых, получить на на имя основе в первый год у них есть сделки */для ... в дополнение к общему количеству сделок этот человек независимо */года .. Пример: ваш два перекрытия «а» и «с» лицами

SELECT ; 
     YT.Name,; 
     MIN(YEAR(YT.DATE)) as FirstYear,; 
     COUNT(*) as TotalPerName; 
    FROM ; 
     YourTable YT; 
    GROUP BY ; 
     1; 
    INTO ; 
     CURSOR C_ByNameTotals 

*/Теперь, когда у вас есть итоги на основе первого года на одного человека с их общей */записи независимо от года, получить год и сумма итоговые значения, которые имеют */записи за данный год .... ТОГДА СОЮЗ за все исходные возможности года * /, которые не были в C_ByNameTotals re sult set. (отсюда ваши 2007 и 2008 годы)

SELECT; 
     FirstYear as FinalYear,; 
     SUM(TotalPerName) as YrCount; 
    FROM ; 
     C_ByNameTotals; 
    GROUP BY ; 
     1; 
    INTO ; 
     CURSOR C_FinalResults; 
UNION; 
SELECT DISTINCT; 
     YEAR(Date) as FinalYear,; 
     0 as YrCount; 
    FROM ; 
     YourTable ; 
    WHERE ; 
     YEAR(Date) NOT IN ; 
      (select FirstYear FROM C_ByNameTotals) 
Смежные вопросы