decorative thumbnail

PATSTAT

location: https://www.epo.org/searching-for-patents/business/patstat.html#tab3

contributors: EPO

tags: Europe, patents

terms of_use: Requires a subscription to access

code: patstat cookbook' by Gaétan de Rassenfosse https://onlinelibrary.wiley.com/doi/full/10.1111/1467-8462.12073

description: PATSTAT contains bibliographical and legal event patent data from leading industrialised and developing countries. This is extracted from the EPO’s databases and is either provided as bulk data or can be consulted online.

last edit: Mon, 04 Mar 2024 16:46:52 GMT

Notes

PATSTAT contains bibliographical and legal event patent data from over 100 patent offices, managed by the EPO. This is extracted from the EPO's databases and is either provided as bulk data or can be consulted online.

The PATSTAT product line consists of two individual databases. They are available as a bulk data set or via PATSTAT Online, a web-based interface to the databases.

The first, PATSTAT Global, is the database most commonly referred to as 'PATSTAT'. The second, PATSTAT Register, and associated queries, is indexed here.

Example Queries for PATSTAT Global

Gaétan de Rassenfosse, Hélène Dernis and Geert Boedt wrote a guide to PATSTAT, including 10 queries and details of the schema, full details of which are available here. The full code is shared here.

The below queries are formatted in MySQL, and are copied from the 2014 version of the code -- the paper contains some guidance to adapting different dialects. For details about the approach of each query, refer to the paper.

1. Identification of Patents by Technology Field

SELECT DISTINCT
    t1.appln_id, t1.appln_auth, t1.appln_nr, t1.appln_kind
FROM
    tls201_appln t1
        INNER JOIN
    tls209_appln_ipc t2 ON t1.appln_id = t2.appln_id
WHERE
    year(t1.appln_filing_date) = 2005
        AND (t1.appln_kind = 'A' OR t1.appln_kind = 'W')
        AND t2.ipc_class_symbol LIKE 'F03D%'
ORDER BY t1.appln_auth , t1.appln_id;

CREATE VIEW our_sample AS
    SELECT DISTINCT
        t1.appln_id, t1.appln_auth, t1.appln_nr, t1.appln_kind
    FROM
        tls201_appln t1
            INNER JOIN
        tls209_appln_ipc t2 ON t1.appln_id = t2.appln_id
    WHERE
        year(t1.appln_filing_date) = 2005
            AND (t1.appln_kind = 'A' OR t1.appln_kind = 'W')
            AND t2.ipc_class_symbol LIKE 'F03D%'
    ORDER BY t1.appln_auth , t1.appln_id;

2: Identifying Patent Cooperation Treaty Applications

SELECT 
    t1.appln_id AS PCT_appln_id,
    t1.appln_auth AS PCT_appln_auth,
    t1.appln_nr AS PCT_appln_nr,
    t1.appln_kind,
    t2.appln_id AS appln_id_sf,
    t2.appln_auth AS appln_auth_sf
FROM
    our_sample t1
        INNER JOIN
    tls201_appln t2 ON t1.appln_id = t2.internat_appln_id
WHERE
    t1.appln_auth = 'DK'
        AND t2.appln_auth IN ('CN' , 'JP')
ORDER BY t1.appln_id;

3. Obtaining Information on Priority Status

SELECT DISTINCT
    t1.appln_id,
    (CASE
        WHEN t2.appln_id IS NULL THEN 1
        ELSE 0
    END) AS is_a_pf
FROM
    our_sample t1
        LEFT OUTER JOIN
    tls204_appln_prior t2 ON t1.appln_id = t2.appln_id
ORDER BY t1.appln_id;

4. Computing the Patent Family Size

SELECT 
    t1.appln_id, COUNT(t3.appln_id) AS family_size
FROM
    our_sample t1
        INNER JOIN
    tls219_inpadoc_fam t2 ON t2.appln_id = t1.appln_id
        INNER JOIN
    tls219_inpadoc_fam t3 ON t3.inpadoc_family_id = t2.inpadoc_family_id
GROUP BY t1.appln_id
ORDER BY t1.appln_id;

5. Computing the Patent Family Size (adapted to measure the geographic family size)

SELECT 
    t1.appln_id,
    COUNT(DISTINCT t4.publn_auth) AS geog_family_size
FROM
    our_sample t1
        INNER JOIN
    tls219_inpadoc_fam t2 ON t2.appln_id = t1.appln_id
        INNER JOIN
    tls219_inpadoc_fam t3 ON t3.inpadoc_family_id = t2.inpadoc_family_id
        INNER JOIN
    tls211_pat_publn t4 ON t4.appln_id = t3.appln_id
WHERE
    t4.publn_auth != 'WO'
GROUP BY t1.appln_id
ORDER BY t1.appln_id;

6. Counting Patents by Country

SELECT 
    person_ctry_code, SUM(tot_in_ctry/tot_in_patent) AS fractional_count
FROM
    (SELECT 
        t.appln_id,
        ifnull(t1.person_ctry_code, '') AS person_ctry_code,
        ifnull(t1.tot_in_ctry, 1) AS tot_in_ctry,
        ifnull(t2.tot_in_patent, 1) AS tot_in_patent
    FROM
        our_sample t
            LEFT OUTER JOIN 
            --> Accounts for missing inventor references in
            tls207_pers_appln table
        (SELECT
            a.appln_id,
            b.person_ctry_code,
            COUNT(b.person_id) AS tot_in_ctry
        FROM
            tls207_pers_appln a
            INNER JOIN tls206_person b ON a.person_id = b.person_id
        WHERE
            a.invt_seq_nr > 0
        GROUP BY a.appln_id, person_ctry_code
        --> Compiles country-level count of inventors per patent 
        ) t1 ON t.appln_id = t1.appln_id
            LEFT OUTER JOIN 
        (SELECT 
            appln_id, MAX(invt_seq_nr) AS tot_in_patent
        FROM
            tls207_pers_appln
        GROUP BY appln_id HAVING MAX(invt_seq_nr) > 0
        --> Compiles total count of inventors per patent
        ) t2 ON t.appln_id = t2.appln_id
    ) our_sample_with_country
GROUP BY person_ctry_code
ORDER BY SUM(tot_in_ctry/tot_in_patent) DESC;

7. Identifying Patents Resulting from International Collaborations

SELECT 
    t1.appln_id,
    COUNT(DISTINCT t3.person_ctry_code) AS nb_locations
FROM
    our_sample t1
        INNER JOIN
    tls207_pers_appln t2 ON t1.appln_id = t2.appln_id
        INNER JOIN
    tls206_person t3 ON t2.person_id = t3.person_id
WHERE
    t3.person_ctry_code IS NOT NULL
        AND t2.invt_seq_nr > 0
GROUP BY t1.appln_id
ORDER BY COUNT(DISTINCT t3.person_ctry_code) DESC , t1.appln_id ASC;

8. Counting Citations Received

SELECT 
    t1.appln_id, COUNT(distinct t3.pat_publn_id) AS cites_3y
FROM
    our_sample t1
        INNER JOIN
    (SELECT 
        appln_id, MIN(publn_date) AS earliest_date
    FROM
        tls211_pat_publn
    GROUP BY appln_id) t2 ON t1.appln_id = t2.appln_id
        INNER JOIN
    tls211_pat_publn t2b ON t2b.appln_id = t2.appln_id
        INNER JOIN
    tls212_citation t3 ON t2b.pat_publn_id = t3.cited_pat_publn_id
        INNER JOIN
    tls211_pat_publn t4 ON t3.pat_publn_id = t4.pat_publn_id
WHERE
    t2b.publn_auth = 'DE'
        AND t4.publn_auth = 'EP'
        AND YEAR(t2.earliest_date) != 9999
        AND YEAR(t4.publn_date) != 9999
        AND t4.publn_date <= DATE_ADD(t2.earliest_date,
        INTERVAL 3 YEAR)
GROUP BY t1.appln_id
ORDER BY COUNT(distinct t3.pat_publn_id) DESC , t1.appln_id;

9. Obtaining Grant Information

SELECT 
    t1.appln_id, MAX(t2.publn_first_grant) AS granted
FROM
    our_sample t1
        INNER JOIN
    tls211_pat_publn t2 ON t1.appln_id = t2.appln_id
WHERE
    t1.appln_auth = 'GB'
        AND t1.appln_kind = 'A'
GROUP BY t1.appln_id
ORDER BY t1.appln_id;

10. Linking Patstat with Data Provided by National Patent Offices

SELECT DISTINCT
    t1.appln_id,
    t2.publn_nr AS publn_nr_patstat,
    CONCAT('GB', RIGHT(t2.publn_nr, 7)) AS publn_nr_ukipo
FROM
    our_sample t1
        INNER JOIN
    tls211_pat_publn t2 ON t1.appln_id = t2.appln_id
WHERE
    t1.appln_auth = 'GB'
        AND t1.appln_kind = 'A'
        AND t2.publn_kind != 'D0'
ORDER BY t1.appln_id;