Я хочу написать SPARQL-запрос, который дает мне символ wikidata_id, label, биржу и тикер для всех случаев, когда компания зарегистрирована на фондовой бирже.
Мой запрос пока выглядит как
SELECT DISTINCT ?id ?idLabel ?exchangeLabel ?tickerLabel
WHERE {
?id wdt:P31/wdt:P279* wd:Q783794 ;
wdt:P414 ?exchange ;
p:P414 [pq:P249 ?ticker].
SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
}
Хотя это дает результаты, которые почти кажутся правильными, существует проблема, когда компании перечислены на нескольких биржах - вот пример проблемы в результатах: Обратите внимание, что в приведенном выше списке Credit Suisse указан три раза с тремя разными тикерами.Несмотря на то, что Credit Suisse котируется на трех фондовых биржах, проблема заключается в том, что NYSE указывается в качестве биржи во всех трех случаях.Еще хуже то, что на самом деле для Credit Suisse есть девять строк, связывающих каждый листинг с каждой фондовой биржей.Правильная информация о листинге будет содержать только три листинга и указана на странице wikidata Credit Suisse :
Что я делаю неправильно?Как я могу получить правильный обмен, который будет связан с каждой строкой тикера?