Åpne data
Datasettet
Alt i arkivet ligger som YAML-filer på GitHub. Ved hver utrulling bygges de om til en skrivebeskyttet SQLite-fil. Nettstedet og spørrefunksjonen leser tabellene under.
Beskrivelsen under er den samme teksten spørrefunksjonen får i systemprompten sin. Det finnes ingen egen, skjult versjon — det du leser her er det modellen vet.
Dekning, slik spørrefunksjonen får den
Disse setningene ligger i systemprompten, regnet ut av databasen ved hver bygging. De kan derfor ikke bli utdaterte uten at dataene faktisk endrer seg.
- 1337 spilte kamper fra 1917 til 2026, fordelt på serie 1122, cup 188, europacup 14, treningskamp 13.
- 14 kamper på terminlista som ikke er spilt ennå.
- 85 år er representert med minst én kamp. Det er noe annet enn 85 komplette sesonger: 41 av 45 avsluttede serieår er merket «complete» i seasons.coverage. Sesonger som pågår er holdt utenfor; de kan ikke være komplette ennå.
- 158 motstandere er møtt minst én gang.
- 543 kamper (41 %) har hendelser som mål og kort. Dekningen følger kilden, ikke kalenderen.
- 512 kamper har lagoppstilling.
- 305 kamper har tilskuertall.
- Arkivet har ingen egne kampreferat. Et tomt treff i reports betyr at referatet ikke er skrevet, ikke at kampen mangler.
Kamper per konkurranse
- 1. divisjon435
- Tippeligaen346
- 2. divisjon198
- Norgesmesterskapet188
- Eliteserien136
- UEFA Europa League-kvalifisering14
- Treningskamp13
- 3. divisjon4
- Landsdelsserien3
Serien skifter navn gjennom historien, og kampene ligger under navnet som gjaldt da de ble spilt. Se kilder og forbehold før du gjenbruker data.
matches
Én rad per kamp i arkivet, sett fra AaFKs synsvinkel. Dette er hovedtabellen. de fleste spørsmål besvares herfra alene.
- Alle kamper i arkivet involverer AaFK. «aafk_score» er alltid vårt lag, uansett om vi spilte hjemme eller borte.
- goal_difference er aafk_score minus opponent_score, altså negativ ved tap.
- result regnes etter ordinær tid pluss ekstraomgang. En kamp avgjort på straffer har result = 'U'. Bruk won_on_penalties for å se hvem som gikk videre.
- Kamper som ennå ikke er spilt har status 'scheduled' og NULL i alle resultatkolonner. Regner du statistikk, filtrer på status IN ('played', 'awarded'). Det er den samme regelen alle aggregatene i datasettet bruker: en kamp avgjort på grønt bord har et resultat og teller med, en avbrutt kamp har ingen sluttstilling og teller ikke.
- confidence sier hvor sikre opplysningene er. 'probable' er vanlig for kamper før 1990. Si fra i svaret når en kamp ikke er 'confirmed'.
- Kampstatistikken kommer fra FotMob og finnes bare for deler av 2014–2026. Per 9. august 2026 har 276 av 1 351 kamper ballbesittelse, skudd, skudd på mål og cornere; 138 har fouls og offsider; 105 har xG. NULL betyr at kilden ikke leverte feltet, ikke null hendelser.
- Dekningen varierer med kildens historiske payload: 2018 og 2019 leverer ingen av de sju feltene, 2021 leverer fire felt for 17 kamper, og 2024/2025 leverer vanligvis bare de fire grunnfeltene. Én 2024-kamp er holdt utenfor fordi FotMob oppgir 32 cornere.
- xG kan ikke sammenlignes ukritisk mellom sesonger: FotMob dokumenterer ikke modellversjonen i kampresponsen, og modellen kan ha endret seg. Arkivet lagrer kildens tall, ikke en egen beregning.
- SQLite har ingen boolsk type: is_home, neutral_venue og has_conflicts er heltall 0 eller 1. Skriv «WHERE is_home = 1», ikke «WHERE is_home IS TRUE».
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Unik ID, på formen YYYY-MM-DD-hjemmelag-bortelag. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongåret kampen tilhører. |
date_confidence | text | 'exact', 'month' eller 'year'. For gamle kamper er noen ganger bare året kjent. |
kickoff | text (HH:MM) | Avspark, lokal tid. Ofte NULL for eldre kamper. |
status | text | 'played', 'scheduled', 'abandoned', 'awarded', 'cancelled' eller 'postponed'. |
competition | text | Konkurransens navn slik det var på kampdatoen: «Tippeligaen» for en kamp i 2005, «Eliteserien» for en i 2024. |
competition_type | text | 'league', 'national_cup', 'european', 'friendly' eller 'playoff'. |
competition_tier | integer | Nivå i seriepyramiden, 1 er øverst. NULL for cup og europa. |
stage | text | 'regular_season', 'quarter_final', 'final' osv. |
round | integer | Serierunde eller cuprunde. |
is_home | integer (0/1) | Sant når AaFK spilte på hjemmebane. |
opponent | text | Motstanderens navn slik det var på kampdatoen. |
opponent_club_id | text | Motstanderens ID, stabil over tid selv om navnet endres. |
aafk_score | integer | AaFKs mål, inkludert ekstraomganger. |
opponent_score | integer | Motstanderens mål, inkludert ekstraomganger. |
goal_difference | integer | aafk_score minus opponent_score. Negativ ved tap. |
result | text | 'S' seier, 'U' uavgjort, 'T' tap. NULL når kampen ikke er spilt. |
after_extra_time | integer (0/1) | Sant når kampen gikk til ekstraomganger. Målene derfra er allerede med i aafk_score. |
note | text | Forbehold om denne kampen. Eldre kilder oppgir ofte bare sluttresultatet, ikke stillingen etter ordinær tid. Står det noe her, skal det tas med i svaret. |
decided_on_penalties | integer (0/1) | Sant når kampen gikk til straffesparkkonkurranse. |
won_on_penalties | integer (0/1) | Ved straffekonkurranse: vant AaFK den? Ellers NULL. |
venue | text | Stadionnavn slik det var på kampdatoen. |
neutral_venue | integer (0/1) | Sant når kampen ble spilt på nøytral bane. |
attendance | integer | Tilskuertall. Ofte NULL for eldre kamper. |
referee | text | Dommer. |
has_stats | integer (0/1) | Sant når kampen har minst ett lagstatistikkfelt. |
aafk_possession | real | AaFKs ballbesittelse i prosent, uansett hjemme/borte. |
opponent_possession | real | Motstanderens ballbesittelse i prosent. |
aafk_shots | integer | AaFKs totale skudd. |
opponent_shots | integer | Motstanderens totale skudd. |
aafk_shots_on_target | integer | AaFKs skudd på mål. |
opponent_shots_on_target | integer | Motstanderens skudd på mål. |
aafk_corners | integer | AaFKs cornere. |
opponent_corners | integer | Motstanderens cornere. |
aafk_fouls | integer | AaFKs registrerte fouls/frispark mot. |
opponent_fouls | integer | Motstanderens registrerte fouls/frispark mot. |
aafk_offsides | integer | AaFKs offsider. |
opponent_offsides | integer | Motstanderens offsider. |
aafk_xg | real | FotMobs forventede mål (xG) for AaFK. NULL når kilden ikke leverte xG. |
opponent_xg | real | FotMobs forventede mål (xG) for motstanderen. |
report_summary | text | Én til to setningers sammendrag, der det finnes. |
confidence | text | 'confirmed', 'probable' eller 'disputed'. |
has_conflicts | integer (0/1) | Sant når en uenighet mellom kilder er ført inn på kampen. Slå opp match_conflicts for å se hva den gjelder. Uenigheten løses ikke automatisk, og høyeste kildeprioritet vinner ikke av seg selv. |
completeness | real | 0–1: hvor mye av kampen som er dokumentert. |
missing_fields | text (JSON-liste) | Feltene completeness savner, som 'score', 'attendance', 'lineups', 'events', 'report', 'referee', 'venue' eller 'providers'. Tom liste betyr at kampen er fullt dokumentert. Bruk json_each for å telle: en kamp uten 'lineups' her har ingen registrert lagoppstilling. |
last_retrieved_at | text (YYYY-MM-DD) | Siste gang en kilde ble hentet for kampen. NULL for kamper uten kildehenvisning. |
tags | text (JSON-liste) | Frie stikkord, f.eks. 'derby'. |
sources | text (JSON-liste) | Historiske publikasjoner som dokumenterer kampen, med sourceId og eventuelt side eller notat. |
url | text | Lenke til kampsiden. Bruk denne som kildehenvisning i svar. |
match_stats
To rader per kamp med statistikk: én for AaFK og én for motstanderen. Bruk denne ved summering eller sammenligning mellom sider.
- Viewet inneholder kamper med minst ett statistikkfelt. Hvert enkelt felt kan fortsatt være NULL.
- side er 'aafk' eller 'opponent'. is_home beskriver om AaFK var hjemmelag, også på motstanderraden.
- xG er FotMobs publiserte tall. Ingen xG-differanse lagres; regn ut xg minus motstanderens xg i spørringen når det trengs.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
competition | text | Konkurransens navn. |
competition_type | text | Konkurransetype. |
is_home | integer (0/1) | Sant når AaFK var hjemmelag. |
side | text | 'aafk' eller 'opponent'. |
team | text | Laget statistikken gjelder. |
opponent | text | Motparten på denne raden. |
possession | real | Ballbesittelse i prosent. |
shots | integer | Totale skudd. |
shots_on_target | integer | Skudd på mål. |
corners | integer | Cornere. |
fouls | integer | Registrerte fouls/frispark mot. |
offsides | integer | Offsider. |
xg | real | FotMobs forventede mål; NULL når feltet mangler. |
url | text | Lenke til kampsiden. |
seasons
Ett sammendrag per sesong OG konkurranse: plassering, målforskjell og resultatfordeling. Et år med både serie og cup gir to rader, så filtrer på competition_id eller competition_type når du vil ha bare den ene.
- Én rad per sesong OG konkurranse. Et år med serie, cup og treningskamper gir tre rader, og tallene i hver rad gjelder bare den konkurransen. Summer aldri over rader uten å filtrere først.
- Serieradene teller bare seriekamper. Kvalifiseringskamper etter sesongen ligger i matches, men holdes utenfor her, slik at en komplett sesong ikke ser ufullstendig ut.
- En rad betyr at året er representert, ikke at sesongen er komplett. Se coverage, og coverage_evidence for hva merket hviler på. 'complete' krever både sammenhengende runder og et kjent forventet omfang som stemmer; sammenhengende runder alene gir 'unverified'.
- Kamper som ikke er spilt teller ikke med i played eller i resultatene. Står scheduled over 0, pågår sesongen.
- played teller kamper med status 'played' eller 'awarded', den samme regelen som i matches og opponents. De tre kan derfor sammenlignes direkte.
| Kolonne | Type | Betydning |
|---|---|---|
season | integer | Sesongår. |
competition_id | text | Konkurransens ID. Ett år kan ha flere rader: serie, cup og treningskamper hver for seg. |
competition | text | Konkurransens navn det året. |
competition_type | text | Konkurransetype. |
competition_tier | integer | Nivå, 1 er øverst. |
final_position | integer | Sluttplassering, hentet fra standings når vi har tabellen for året. |
teams_in_league | integer | Antall lag i divisjonen, talt i standings når vi har tabellen for året. |
head_coach | text | Hovedtrener. |
promoted | integer (0/1) | Rykket opp. |
relegated | integer (0/1) | Rykket ned. |
note | text | Forbehold om sesongen, f.eks. at arkivet bare har deler av den. NULL når det ikke er noe å ta forbehold om. |
coverage | text | Hvor godt sesongen er dekket: 'complete' (hver runde fra første til siste, og like mange kamper som det kjente omfanget), 'in_progress' (sesongen pågår, det står kamper igjen på terminlista), 'partial' (runder mangler, eller kampantallet stemmer ikke med omfanget), 'unverified' (rundene henger sammen, men ingen kilde sier hvor mange det skulle vært), 'isolated' (kamper uten rundenummer), 'not_applicable' (cup og treningskamper, som ikke har serierunder). Bruk denne når spørsmålet gjelder om et tall er hele sesongen eller bare det arkivet har. |
coverage_evidence | text | Hva merket hviler på: 'rounds_and_standings' (sluttabellen sier hvor mange kamper AaFK spilte, og arkivet har like mange), 'rounds_and_declared_count' (omfanget er oppgitt for hånd i sesongfila), 'rounds_only' (bare rundenumre, omfanget er ukjent), 'isolated_matches_only', 'season_in_progress', 'not_applicable'. |
expected_matches | integer | Hvor mange kamper AaFK skulle spilt i konkurransen det året. Hentet fra sluttabellen når vi har den, ellers fra sesongfila. NULL betyr at ingen vet, og da kan sesongen ikke være 'complete'. |
last_round | integer | Høyeste serierunde i sesongen. For en komplett sesong er dette antall runder. NULL for cup og treningskamper. |
scheduled | integer | Kamper som står igjen på terminlista i denne konkurransen. Over 0 betyr at sesongen pågår, ikke at arkivet mangler noe. Disse kampene er ikke med i played, wins, draws, losses eller målene. |
played | integer | Antall spilte kamper. |
wins | integer | Seire. |
draws | integer | Uavgjorte. |
losses | integer | Tap. |
goals_for | integer | Mål scoret. |
goals_against | integer | Mål sluppet inn. |
goal_difference | integer | Målforskjell. |
avg_home_attendance | real | Snitt tilskuertall på hjemmekamper. |
url | text | Lenke til sesongsiden. |
opponents
Innbyrdes statistikk mot hver motstander, over hele arkivet og alle konkurranser.
- played, wins, draws og losses regnes over de samme kampene, statusene 'played' og 'awarded'. wins + draws + losses er derfor alltid lik played.
- first_meeting ser også kamper som ikke er spilt. En motstander vi har på terminlista uten å ha møtt står med played = 0 og last_meeting = NULL.
| Kolonne | Type | Betydning |
|---|---|---|
opponent_club_id | text | Motstanderens ID. |
opponent | text | Motstanderens navn (dagens navn). |
city | text | Motstanderens by. |
played | integer | Antall spilte kamper mot laget. |
wins | integer | AaFK-seire. |
draws | integer | Uavgjorte. |
losses | integer | AaFK-tap. |
goals_for | integer | AaFK-mål totalt. |
goals_against | integer | Innslupne mål totalt. |
first_meeting | text (YYYY-MM-DD) | Første møte. |
last_meeting | text (YYYY-MM-DD) | Siste spilte møte. |
url | text | Lenke til motstandersiden. |
standings
Sluttabellen for en seriesesong, ett lag per rad. Bruk denne når spørsmålet gjelder hvor AaFK endte, hvem som vant divisjonen, eller hvor mange poeng det skilte.
- Bare seriesesonger, og bare de årene kilden har tabell for. Cupen har ingen tabell.
- team er kildens eget lagnavn. club_id er satt for lagene arkivet kjenner fra før og NULL for resten, siden AaFK ikke har møtt alle lagene i hver divisjon. Filtrer på club_id = 'aalesunds-fk' for å finne vår egen rad.
- points er tallet tabellen viser, ikke wins*3+draws. Poengtrekk finnes, og to poeng for seier gjaldt til 1987.
- Tabellen dekker bare seriekampene. Cupkamper samme år ligger i matches og er ikke med her.
| Kolonne | Type | Betydning |
|---|---|---|
competition_id | text | Konkurransens ID. |
competition | text | Konkurransens navn. |
season | integer | Sesongår. |
position | integer | Plassering, 1 er øverst. |
team | text | Lagets navn slik kilden skrev det. |
club_id | text | Klubben i arkivet, når den finnes der. NULL ellers. |
played | integer | Spilte kamper. |
wins | integer | Seire. |
draws | integer | Uavgjorte. |
losses | integer | Tap. |
goals_for | integer | Scorede mål. |
goals_against | integer | Innslupne mål. |
goal_difference | integer | Målforskjell. |
points | integer | Poeng slik tabellen viser dem. |
outcome | text | 'promoted', 'relegated', 'promotion_playoff', 'relegation_playoff', 'playoff' eller 'none'. |
sources | JSON | Array av kildereferanser som dokumenterer plasseringen. |
note | text | Kildens egen merknad bak poengsummen, f.eks. en europacupplass. |
url | text | Lenke til motstandersiden når klubben finnes i arkivet. |
standings_progression
Hvor AaFK lå i tabellen etter hver serierunde. Bruk denne når spørsmålet gjelder utviklingen gjennom en sesong, ikke hvor den endte.
- Utregnet ved innhøsting av kildens fulle runderekke, ikke lagret som kamper. Kampene til de andre lagene ligger ikke i arkivet.
- Bare sesonger der utregningen lander på nøyaktig samme rad som tabellen kilden trykte. Gjør den ikke det, er raden utelatt framfor å vises feil.
- Bare AaFK. De andre lagenes vei gjennom sesongen finnes ikke her.
| Kolonne | Type | Betydning |
|---|---|---|
competition_id | text | Konkurransens ID. |
season | integer | Sesongår. |
round | integer | Serierunde. |
position | integer | Plassering etter denne runden. |
points | integer | Poeng etter denne runden. |
played | integer | Spilte kamper etter denne runden. Lavere enn round når en kamp er utsatt. |
goal_difference | integer | Målforskjell etter denne runden. |
squad
Stallen per sesong: hvem som var med, hvor mange kamper og hvor mange mål. Bruk denne på spørsmål om spillere, ikke matches.
- Utledet av lagoppstillingene, som arkivet har fra 2010. Sesonger før det har ingen rader her, og det er en manglende kilde og ikke en tom stall.
- appearances teller oppsatte tropper, ikke spilletid. Benken er med, fordi kilden ikke skiller mellom en som satt der og en som kom inn. Bruk starts når spørsmålet gjelder hvem som spilte.
- goals teller bare mål i kamper der navnet står i hendelseslista. En kamp uten hendelser gir null mål for alle som spilte den.
- person_key slår sammen skrivemåter av samme navn. name er den skrivemåten vi viser.
- Bare AaFKs egne spillere. Motstandernes oppstillinger er registrert, men er ikke med her.
- number, position, nationality og wikidata kommer fra personregisteret og dekker en del av stallen, ikke hele. NULL betyr at personen ikke står der, ikke at opplysningen ikke finnes.
| Kolonne | Type | Betydning |
|---|---|---|
season | integer | Sesongår. |
person_key | text | Personens identitet, normalisert. Bruk denne når du grupperer over sesonger. |
name | text | Navnet slik det vises. |
appearances | integer | Kamper spilleren sto oppført i troppen. |
starts | integer | Kamper fra start. |
goals | integer | Mål i sesongen, talt fra hendelsene. |
person_id | text | Personen i registeret, når hun eller han står der. NULL ellers. |
number | integer | Draktnummer den sesongen, fra personregisteret. NULL når vi ikke har det. |
position | text | 'keeper', 'forsvar', 'midtbane' eller 'angrep', fra personregisteret. |
nationality | text | Nasjonalitet slik kilden skrev den, f.eks. 'Norge'. |
wikidata | text | Wikidata-ID, f.eks. Q1796755. Peker videre; dataene bak hentes ikke hit. |
first_match | text (YYYY-MM-DD) | Første kamp i troppen den sesongen. |
last_match | text (YYYY-MM-DD) | Siste kamp i troppen den sesongen. |
coach_spells
Én rad per sammenhengende periode en trener hadde laget. Bruk denne på spørsmål om hvem som var trener når, og om trenerbytter.
- Utledet av hvem som står oppført på hver kamp, ikke av ansettelsesdatoer. En periode starter på første kamp og slutter på siste, ikke på dagen avtalen ble skrevet.
- Et trenerbytte midt i sesongen gir to rader det året. 2023 gir tre.
- En trener som kommer tilbake får to rader. Kjetil Rekdal har en periode fra 2010 og en fra 2024.
- Bare fra 2010, som er der lagoppstillingene starter.
| Kolonne | Type | Betydning |
|---|---|---|
person_key | text | Trenerens identitet, normalisert. |
name | text | Navnet slik det vises. |
from_date | text (YYYY-MM-DD) | Første kamp i perioden. |
to_date | text (YYYY-MM-DD) | Siste kamp i perioden. |
from_season | integer | Sesongen perioden startet. |
to_season | integer | Sesongen perioden sluttet. |
matches | integer | Kamper i perioden. |
declared_coach_spells
Trenerperioder oppgitt av en kilde, for årene kampdataene ikke rekker. Bruk coach_spells når spørsmålet gjelder 2010 eller senere.
- Oppgitt, ikke utledet: bare årstall, og vikarene mangler. Christian Johnsen står som 2023 til 2024; at Marius Boee og Sindre Eid hadde laget imellom, vet bare kampene.
- Rekker til 2001. Eldre trenere finnes ikke i noen kilde vi har.
- Overlapper med coach_spells for 2010 og senere. De to erstatter ikke hverandre; coach_spells er den nøyaktige.
| Kolonne | Type | Betydning |
|---|---|---|
person_id | text | Personen i registeret. |
name | text | Navnet slik det vises. |
from_season | integer | Første sesong i perioden. |
to_season | integer | Siste sesong. NULL når perioden ikke er avsluttet i kilden. |
match_events
Én rad per hendelse i en kamp: mål, kort og innbytter.
- Dekningen er ujevn og følger kilden, ikke kalenderen: kamper hentet fra FotMob har hendelser, kamper hentet fra RSSSF har bare resultatet. Fravær av mål her betyr ikke at det ikke ble scoret. Sjekk aafk_score i matches.
- Antallet kamper med hendelser står i dekningsavsnittet nederst, regnet ut av databasen ved hver bygging.
- team er 'aafk' eller 'opponent', ikke hjemme/borte.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
minute | integer | Spilleminutt. |
stoppage | integer | Tilleggstid. 45+2 er minute 45, stoppage 2. |
event_type | text | 'goal', 'own_goal', 'penalty_goal', 'yellow_card', 'red_card', 'substitution' m.fl. |
team | text | 'aafk' eller 'opponent'. |
player | text | Spiller. |
assist | text | Målgivende. |
player_off | text | Ved innbytte: spilleren som gikk ut. |
url | text | Lenke til kampsiden. |
reports
Kampreferat, som en FTS5-tabell. Samme objekt dekker begge bruksmåtene: fritekstsøk og oppslag på match_id.
- Alle referat er skrevet for dette arkivet, aldri kopiert fra avis eller klubbside.
- Fritekstsøk: WHERE reports MATCH 'ordet'. Flere ord: MATCH 'ord1 ord2' (OG), MATCH 'ord1 OR ord2'. Prefiks: MATCH 'snuoper*'.
- Bare summary og body er søkbare. De andre kolonnene leses ut som vanlig, men treffer ikke på MATCH.
- Arkivet har foreløpig ingen egne kampreferat. Et tomt søkeresultat betyr derfor ikke at kampen mangler, det betyr at ingen har skrevet referatet ennå. Si det slik, ikke som om kampen ikke finnes.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampens ID. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
opponent | text | Motstander. |
is_home | integer (0/1) | Hjemmekamp. |
result | text | 'S', 'U' eller 'T'. |
summary | text | Kort sammendrag. |
body | text | Referatet. |
byline | text | Hvem som skrev det. |
url | text | Lenke til kampsiden. |
match_conflicts
Én rad per verdi i en uenighet mellom kilder. Bruk denne når has_conflicts er 1, eller når confidence er 'disputed', for å si hva uenigheten faktisk gjelder.
- To kilder som er uenige om ett felt gir to rader med samme match_id og field, og ulik value.
- decision = 'unresolved' betyr at ingen har tatt stilling. Da er is_chosen 0 på alle radene, og svaret skal oppgi begge verdiene med hver sin kilde framfor å velge en.
- Er konflikten avgjort, står begrunnelsen i reason og datoen i decided_at. Gjenfortell begrunnelsen framfor å finne på en.
- Ingenting her avgjøres av kildeprioritet automatisk. Et valg er tatt av et menneske, og da står det hvorfor.
| Kolonne | Type | Betydning |
|---|---|---|
match_id | text | Kampen uenigheten gjelder. |
date | text (YYYY-MM-DD) | Kampdato. |
season | integer | Sesongår. |
opponent | text | Motstanderens navn den datoen. |
field | text | Feltet kildene er uenige om, med punktnotasjon: 'away.score', 'attendance'. |
provider_id | text | Kilden som oppgir denne verdien. |
value | text eller integer | Verdien kilden oppgir. |
value_note | text | Kildens eget forbehold om verdien. |
is_chosen | integer (0/1) | Sant for verdien arkivet bruker. Alle rader er 0 når konflikten ikke er avgjort. |
decision | text | 'unresolved', 'manual', 'source_priority' eller 'independent_source'. |
decided_at | text (YYYY-MM-DD) | Når valget ble tatt. NULL når det ikke er tatt. |
reason | text | Hvorfor valget falt slik. NULL når konflikten står åpen. |
locked | integer (0/1) | Sant når verdien er låst mot å bli overskrevet av en senere innhøsting. |
conflict_note | text | Notat om uenigheten som helhet. |
url | text | Lenke til kampsiden. |
providers
Kildekatalogen: hvor dataene kommer fra og hvor mye vi stoler på hver kilde.
- priority er en erklært rangering, ikke en avgjørelsesregel. Ingenting i innhøstingen velger verdi ut fra den.
- Hver innhøsting skriver en observasjon per kilde, med kildens rå verdi og den normaliserte. Er to kilder uenige, står begge observasjonene der; ingen av dem vinner av seg selv.
- En uenighet blir først synlig i matches.has_conflicts når noen har ført den inn som en konflikt. Feltene i matches.manual overskrives aldri av en senere innhøsting.
- Sier du noe om en kamp der kildene er uenige, oppgi begge verdiene og hvilken kilde de kommer fra, framfor å velge en side.
| Kolonne | Type | Betydning |
|---|---|---|
provider_id | text | Kildens ID. |
name | text | Kildens navn. |
url | text | Kildens nettadresse. |
priority | integer | Kildens rangering. Den avgjør IKKE automatisk hvem som vinner en konflikt; se conflicts i matches og caveats over. |
license | text | Lisens, der den er kjent. |
automated_access | text | Om kilden kan hentes automatisk: allowed, permission_required, blocked eller unknown. |
public_redistribution | text | Om data derfra kan publiseres videre: allowed, permission_required, denied eller unknown. Et annet spørsmål enn om den kan hentes. |
attribution_required | integer (0/1) | Om kilden krever kreditering. |
permission_status | text | Hva motparten har svart: not_needed, pending, requested, granted eller denied. Sier ingenting om hva vi har bestemt. |
ingest_decision | text | Hva vi har bestemt: blocked, pending, allowed eller accepted_risk. «accepted_risk» betyr at prosjekteier har valgt å gå videre uten tillatelse, ikke at tillatelse finnes. |
permission_requested_at | text (YYYY-MM-DD) | Når forespørselen ble sendt. |
risk_accepted_at | text (YYYY-MM-DD) | Når risikoen ble akseptert. |
risk_accepted_by | text | Hvem som aksepterte den. |
terms_checked_at | text (YYYY-MM-DD) | Når vilkårene sist ble lest av et menneske. |
robots_checked_at | text (YYYY-MM-DD) | Når robots.txt sist ble kontrollert. |
permission_note | text | Hva som er avklart, hvem som er spurt, og hva som gjenstår. |
note | text | Forbehold og dekningsområde. |
contributions
Brukerinnsendte bidrag, observasjoner og minner hentet fra innboksen.
- Bare godkjente bidrag som har gått gjennom redaksjonell kontroll ligger her.
- Bidrag knyttes til enten en kamp (target_id = match_id) eller en sesong (target_id = årstall). Sjekk scope ('match' eller 'season') for å se hva target_id peker på.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik ID for bidraget. |
scope | text | 'match' eller 'season'. |
target_id | text | Kamp-ID eller sesongår. |
category | text | Kategori, f.eks. 'memory', 'context', 'trivia', 'event_detail'. |
text | text | Selve innholdet. |
contributor | text | Forfatterens navn. |
submitted_at | text (YYYY-MM-DD) | Innsendingsdato. |
verification | text | Grad av bekreftelse: 'unverified', 'corroborated' eller 'verified'. |
source_url | text | Eventuell kildelenke for påstanden. |
sources
Historisk materiale og kilder fra Nasjonalbiblioteket og AaFK Historiske arkiv.
- Inneholder bøker, medlemsblader, årsmeldinger og andre dokumenter.
- Selve innholdet er ikke lagret her, men kan leses via access_url.
| Kolonne | Type | Betydning |
|---|---|---|
id | text | Unik ID for publikasjonen. |
parent_source_id | text | ID for kildens serie (f.eks. aafk-medlemsblad). |
title | text | Tittel. |
source_type | text | 'book', 'anniversary_book', 'member_magazine', 'annual_report', 'match_program', 'supporter_publication', 'local_history_book', 'newspaper_supplement', 'series' eller 'other'. |
issue | text | Utgave. |
volume | text | Årgang/Volum. |
publisher | text | Utgiver, f.eks. Aalesunds fotballklubb. |
year | integer | Utgivelsesår. |
urn | text | Stabil bibliografisk identifikator, som regel Nasjonalbibliotekets URN. NULL når ingen er kjent. |
author | text | Forfatter eller redaktør. NULL når katalogposten ikke oppgir noen. |
description | text | Kort beskrivelse av hva kilden inneholder. NULL når ingen er skrevet. |
cover_url | text | Lenke til forsidebilde. |
access_url | text | Lenke for å lese publikasjonen hos kilden. |
url | text | Lenke til visningssiden på vårt nettsted. |
Eksempelspørringer
Disse kjøres som en del av testene, så de virker alltid mot datasettet slik det er nå.
Hvilke kamper har xG-data, og hva var forskjellen?
SELECT date, opponent, aafk_xg, opponent_xg,
aafk_xg - opponent_xg AS xg_difference, url
FROM matches
WHERE aafk_xg IS NOT NULL AND opponent_xg IS NOT NULL
ORDER BY date DESCNår tapte vi sist med 6 mål på hjemmebane?
SELECT date, opponent, aafk_score, opponent_score, competition, url FROM matches WHERE is_home = 1 AND result = 'T' AND goal_difference <= -6 ORDER BY date DESC LIMIT 1
Hvilken motstander har vi tapt flest ganger mot?
SELECT opponent, losses, played, wins, draws FROM opponents ORDER BY losses DESC LIMIT 5
Hvor mange mål scoret vi i 2024?
SELECT sum(aafk_score) AS mal, count(*) AS kamper FROM matches WHERE season = 2024 AND status = 'played'
Hvilke sesonger har vi hatt best målforskjell?
SELECT season, competition, goal_difference, final_position FROM seasons ORDER BY goal_difference DESC LIMIT 5
Finnes det referat som nevner snuoperasjon?
SELECT match_id, date, opponent, summary, url FROM reports WHERE reports MATCH 'snuoperasjon' ORDER BY date DESC
Hva er den eldste kampen i arkivet?
SELECT date, opponent, is_home, aafk_score, opponent_score, competition, url FROM matches ORDER BY date ASC LIMIT 1
Hvor mange kamper har vi fra hvert tiår?
SELECT substr(date, 1, 3) || '0-tallet' AS tiar, count(*) AS kamper FROM matches GROUP BY tiar ORDER BY tiar
Har vi noen gang vunnet en cupkamp på straffer?
SELECT date, opponent, aafk_score, opponent_score, url FROM matches WHERE decided_on_penalties = 1 AND won_on_penalties = 1 ORDER BY date DESC
Er det lagt inn noen bidrag eller minner om kamper mot Brann i 1998?
SELECT c.text, c.contributor, c.verification FROM contributions c JOIN matches m ON c.target_id = m.match_id WHERE c.scope = 'match' AND m.opponent = 'SK Brann' AND m.season = 1998
Hvilke medlemsblader har vi fra 1970-tallet?
SELECT title, year, access_url FROM sources WHERE source_type = 'member_magazine' AND year BETWEEN 1970 AND 1979 ORDER BY year ASC
Slik er spørrefunksjonen begrenset
Spørrefunksjonen kan kjøre egne SELECT-spørringer mot tabellene over. Det er dét som gjør at den kan svare på spørsmål ingen har laget et ferdig oppslag for. Grensene er:
- Arkivfilen åpnes skrivebeskyttet. Et forsøk på å endre noe avvises av SQLite selv, ikke av koden vår.
- Spørringen kjører i en egen prosess som avlives ved timeout, og den ser bare tabellene dokumentert på denne siden — ikke rådataene bak dem.
- Én setning per spørring, og bare SELECT.
- Maks 200 rader og 3 sekunders kjøretid.
- Hver spørring som kjøres vises under svaret, så du kan etterprøve hva svaret bygger på.
Referattekst i arkivet er skrevet av bidragsytere. Spørrefunksjonen behandler slikt innhold som data, aldri som instruksjoner til seg selv.