-2

日付パラメーター間でのみ最初のインスタンスと最後のインスタンスを抽出するクエリが必要です。を介してテーブルに
リンクされたfinancialyearenddateフィールドを持つ財務情報を記録するテーブルがあります。各企業もテーブルにリンクされており、複数のプログラムを持つことができます。最初と最後のインスタンス (MIN と MAX を使用) のみをプルするように調整した特定のプログラムで各企業の財務をプルするレポートがありますが、最初のインスタンスが必要です。特定の日付パラメーターの後、および特定の日付パラメーターの前の最後のインスタンス。 CompanycompanyIDprogramme

: 会社 ABloggs には 1999 年、2000 年、2001 年、2004 年、2006 年、2007 年、2009 年の財務がありますが、プログラムは 2001 年から 2007 年まで実行されたので、それらの年の間の最初の財務記録と最後の財務記録、つまり 2001 年と 2007 年の記録のみが必要です。どんな助けでも感謝します。急いでデータが必要だったので、現時点では2つのクエリを使用していますが、1つのクエリで必要であり、会計年度の終了日がパラメータ間にあり、会社のGVAレコードが2つ以上ある場合にのみ必要です。

クエリ1 :

SELECT 
    gva.ccx_companyname, 
    gva.ccx_depreciation, 
    gva.ccx_exportturnover, 
    gva.ccx_financialyearenddate, 
    gva.ccx_netprofitbeforetax, 
    gva.ccx_totalturnover, 
    gva.ccx_totalwages, 
    gva.ccx_statusname, 
    gva.ccx_status, 
    gva.ccx_company, 
    gva.ccx_totalwages + gva.ccx_netprofitbeforetax + gva.ccx_depreciation AS GVA, 
    gva.ccx_nofulltimeequivalentemployees
FROM 
    (
        SELECT
            ccx_companyname, 
            MAX(ccx_financialyearenddate) AS LatestDate
        FROM Filteredccx_gva AS Filteredccx_gva_1
        GROUP BY ccx_companyname
    ) AS min_1 
INNER JOIN Filteredccx_gva AS gva 
    ON min_1.ccx_companyname = gva.ccx_companyname AND 
       min_1.LatestDate = gva.ccx_financialyearenddate
WHERE (gva.ccx_status = ACTUAL)

クエリ 2:

SELECT 
    gva.ccx_companyname, 
    gva.ccx_depreciation, 
    gva.ccx_exportturnover,
    gva.ccx_financialyearenddate, 
    gva.ccx_netprofitbeforetax, 
    gva.ccx_totalturnover,
    gva.ccx_totalwages, 
    gva.ccx_statusname, 
    gva.ccx_status, 
    gva.ccx_company, 
    gva.ccx_totalwages + gva.ccx_netprofitbeforetax + gva.ccx_depreciation AS GVA, 
    gva.ccx_nofulltimeequivalentemployees
FROM 
    (
         SELECT
             ccx_companyname, 
             MIN(ccx_financialyearenddate) AS FirstDate
         FROM Filteredccx_gva AS Filteredccx_gva_1
         GROUP BY ccx_companyname
    ) AS MAX_1 
INNER JOIN Filteredccx_gva AS gva 
    ON MAX_1.ccx_companyname = gva.ccx_companyname AND 
       MAX_1.FirstDate = gva.ccx_financialyearenddate
WHERE (gva.ccx_status = ACTUAL)
4

3 に答える 3

0
declare @programme table (ccx_companyname varchar(max), start_year int, end_year int);
insert @programme values
('ABloggs', 2001, 2007);

declare @companies table (ccx_companyname varchar(max), ccx_financialyearenddate int);
insert @companies values
 ('ABloggs', 1999)
,('ABloggs', 2000)
,('ABloggs', 2001)
,('ABloggs', 2004)
,('ABloggs', 2006)
,('ABloggs', 2007)
,('ABloggs', 2009);

select c.ccx_companyname, min(ccx_financialyearenddate), max(ccx_financialyearenddate)
from @companies c
join @programme p on c.ccx_companyname = p.ccx_companyname
where c.ccx_financialyearenddate >= p.start_year and c.ccx_financialyearenddate <= p.end_year
group by c.ccx_companyname
having count(*) > 1;
于 2013-03-22T15:06:50.043 に答える
0

仮想テーブルの同じ GROUP BY クエリに MIN および MAX 集計を含めることで、2 つの元のクエリを 1 つのクエリに結合できます。また、COUNT( ) と HAVING COUNT( ) > 1 を含めると、会社には少なくとも 2 つの日付が必要になります。したがって、クエリは次のようになります。

SELECT 
    gva.ccx_companyname, 
    gva.ccx_depreciation, 
    gva.ccx_exportturnover,
    gva.ccx_financialyearenddate, 
    gva.ccx_netprofitbeforetax, 
    gva.ccx_totalturnover,
    gva.ccx_totalwages, 
    gva.ccx_statusname, 
    gva.ccx_status, 
    gva.ccx_company, 
    gva.ccx_totalwages + gva.ccx_netprofitbeforetax + gva.ccx_depreciation AS GVA, 
    gva.ccx_nofulltimeequivalentemployees
FROM 
    (SELECT
         ccx_companyname,
         ccx_status,
         MIN(ccx_financialyearenddate) AS FirstDate,
         MAX(ccx_financialyearenddate) AS LastDate,
         COUNT(*) AS NumDates
     FROM Filteredccx_gva AS Filteredccx_gva_1
     WHERE (ccx_status = ACTUAL)
     GROUP BY ccx_companyname, ccx_status
     HAVING COUNT(*) > 1
    ) AS MinMax
INNER JOIN Filteredccx_gva AS gva 
      ON MinMax.ccx_companyname = gva.ccx_companyname AND 
         (MinMax.FirstDate = gva.ccx_financialyearenddate OR
          MinMax.LastDate = gva.ccx_financialyearenddate)
WHERE (gva.ccx_status = MinMax.ccx_status)
ORDER BY gva.ccx_companyname, gva.ccx_financialyearenddate
于 2013-03-25T15:07:19.047 に答える
0

最初と最後の日付パラメーターを使用して where 句を追加することはできませんか。このようなもの:

SELECT <companyId>, MIN(<date>), MAX(<date>)
FROM <table>
WHERE <date> BETWEEN @firstDate AND @lastDate
GROUP BY <companyId>
于 2013-03-22T12:26:25.840 に答える