{"id":24191,"date":"2023-09-19T05:00:00","date_gmt":"2023-09-19T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=24191"},"modified":"2026-05-07T13:45:46","modified_gmt":"2026-05-07T11:45:46","slug":"funkcje-okna-w-jezyku-sql","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/funkcje-okna-w-jezyku-sql\/","title":{"rendered":"Funkcje okna w j\u0119zyku SQL"},"content":{"rendered":"\n<p>SQL (ang. Structured Query Language) to j\u0119zyk spotykany praktycznie w wi\u0119kszo\u015bci aplikacji backendowych, niezale\u017cnie od u\u017cytej technologii. Je\u015bli projekt wymaga integralno\u015bci danych i mo\u017cliwo\u015bci zaawansowanego dost\u0119pu do nich, to oczywistym wyborem staje si\u0119 w\u0142a\u015bnie baza SQL. Na rynku dost\u0119pnych jest wiele baz danych SQL. Najpopularniejsze z nich to MySQL, MSSQL, Oracle czy otwarto\u017ar\u00f3d\u0142owy PostgreSQL, kt\u00f3rego u\u017cyjemy w tym artykule.<\/p>\n\n\n\n<p>Cz\u0119sto w aplikacjach backendowych wykorzystywane s\u0105 mechanizmy ORM (ang. Object-Relational Mapping), dzi\u0119ki kt\u00f3rym do korzystania z bazy danych praktycznie nie potrzebujemy znajomo\u015bci j\u0119zyka SQL. S\u0105 one jednak do\u015b\u0107 mocno ograniczone i nie pozwalaj\u0105 w pe\u0142ni korzysta\u0107 z funkcjonalno\u015bci, jakie oferuje silnik bazodanowy. <\/p>\n\n\n\n<p>Jedn\u0105 z takich funkcjonalno\u015bci s\u0105 w\u0142a\u015bnie funkcje okna, kt\u00f3re przybli\u017c\u0119 w artykule.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Czym s\u0105 funkcje okna w SQL?<\/strong><\/h2>\n\n\n\n<p>Funkcje okna (ang. window functions lub analytic functions) w SQL to specjalne rodzaje funkcji, kt\u00f3re pozwalaj\u0105 na wykonywanie oblicze\u0144 na zestawie wierszy z wyniku zapytania, przy zachowaniu relacji mi\u0119dzy wierszami. S\u0105 to funkcje, kt\u00f3re pozwalaj\u0105 na realizacj\u0119 skomplikowanych operacji analitycznych i agregacyjnych w obr\u0119bie zbioru wynikowego zapytania, bez konieczno\u015bci korzystania z podzapyta\u0144, samodzielnej obr\u00f3bki wyniku czy tworzenia tymczasowych tabel czy widok\u00f3w.<\/p>\n\n\n\n<p>Je\u015bli ta <strong>definicja wydaje Ci si\u0119 skomplikowana<\/strong>, nie przejmuj si\u0119. W dalszej cz\u0119\u015bci artyku\u0142u <strong>pojawi\u0105 si\u0119 przyk\u0142ady u\u017cycia.<\/strong><\/p>\n\n\n\n<p>Popularne silniki bazodanowe, kt\u00f3re posiadaj\u0105 implementacj\u0119 funkcji okna, to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PostgreSQL(pe\u0142na implementacja),<\/li>\n\n\n\n<li>SQLite (implementacja okrojona),<\/li>\n\n\n\n<li>Oracle od wersji 11 wzwy\u017c,<\/li>\n\n\n\n<li>MS SQL od wersji 2012 wzwy\u017c,<\/li>\n\n\n\n<li>MySQL od wersji 8.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/szkolenia\/wyszukiwarka-szkolen\/all\/all\/all\/sql\/\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" width=\"737\" height=\"170\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-14.jpg\" alt=\"oferta szkole\u0144\" class=\"wp-image-29794\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-14.jpg 737w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2024\/12\/szkolenia-14-300x69.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Konstrukcja funkcji okna<\/strong><\/h2>\n\n\n\n<ol style=\"list-style-type:1\" class=\"wp-block-list\">\n<li><strong>Okno (ang. Window)<\/strong> \u2013 okno to zbi\u00f3r wierszy z wyniku zapytania, na kt\u00f3rym wykonywane s\u0105 obliczenia. Jest definiowane poprzez klauzul\u0119 OVER, pozwalaj\u0105c\u0105 okre\u015bli\u0107 kolejno\u015b\u0107 sortowania (ORDER BY) oraz warunki partycjonowania (PARTITION BY). Partycjonowanie dzieli wynik na grupy, w ramach kt\u00f3rych wykonywane s\u0105 obliczenia.<\/li>\n\n\n\n<li><strong>Funkcje Agreguj\u0105ce<\/strong> \u2013 funkcje okna obejmuj\u0105 funkcje agreguj\u0105ce takie jak: SUM, AVG, MIN, MAX, kt\u00f3re s\u0105 wykonywane na zestawie wierszy w obr\u0119bie okna. To pozwala na uzyskanie wynik\u00f3w agregacji na poziomie okna, a nie ca\u0142ego zestawu wynikowego.<\/li>\n\n\n\n<li><strong>Funkcje Analityczne<\/strong> \u2013 opr\u00f3cz funkcji agreguj\u0105cych, funkcje okna umo\u017cliwiaj\u0105 wykonywanie funkcji analitycznych, takich jak: ROW_NUMBER, RANK, DENSE_RANK, LEAD, LAG, FIRST_VALUE, LAST_VALUE itp. S\u0142u\u017c\u0105 one do przypisywania numer\u00f3w, ranking\u00f3w, uzyskiwania warto\u015bci poprzednich i nast\u0119pnych wierszy w obr\u0119bie okna.<\/li>\n\n\n\n<li><strong>Klauzula porz\u0105dkowania<\/strong> \u2013 funkcje okna dzia\u0142aj\u0105 w oparciu o porz\u0105dek wierszy, kt\u00f3ry mo\u017cesz zdefiniowa\u0107 przy u\u017cyciu klauzuli ORDER BY. To pozwala na kontrolowanie, na jakiej podstawie wykonywane s\u0105 obliczenia.<\/li>\n<\/ol>\n\n\n\n<p>Wydaje si\u0119 skomplikowane? Nie przejmuj si\u0119, poni\u017csze przyk\u0142ady powinny rozwia\u0107 wszelkie w\u0105tpliwo\u015bci.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Popularne funkcje okna<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>AVG<\/strong>:<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT\n    worker_id,\n    department_name,\n    salary,\n    AVG(salary) OVER(PARTITION BY department_name ORDER BY salary) AS avg_salary\nFROM\n    sii.workers;\n<\/pre><\/div>\n\n\n<p>Wynik:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/1-1.png\"><img decoding=\"async\" width=\"803\" height=\"313\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/1-1.png\" alt=\"Funkcja okna AVG\" class=\"wp-image-24193\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/1-1.png 803w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/1-1-300x117.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/1-1-768x299.png 768w\" sizes=\"(max-width: 803px) 100vw, 803px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 1 Funkcja okna AVG<\/figcaption><\/figure>\n\n\n\n<p>W tym przyk\u0142adzie funkcja<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nAVG(salary) OVER(PARTITION BY department_id ORDER BY salary)\n<\/pre><\/div>\n\n\n<p>oblicza \u015bredni\u0105 pensj\u0119 w obr\u0119bie ka\u017cdego dzia\u0142u, zachowuj\u0105c porz\u0105dek rosn\u0105cy pensji. Dzi\u0119ki temu, mo\u017cna zobaczy\u0107, jak pensje pracownik\u00f3w w danym dziale por\u00f3wnuj\u0105 si\u0119 do \u015bredniej w ich dziale.<\/p>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>ROW_NUMBER<\/strong>: Skorzystajmy z tabeli<em> workers <\/em>z przyk\u0142adu u\u017cytego powy\u017cej. Przyk\u0142ad b\u0119dzie do\u015b\u0107 banalny \u2013 zak\u0142adamy, \u017ce chcemy nada\u0107 numery pracownikom, uwzgl\u0119dniaj\u0105c wysoko\u015b\u0107 ich zarobk\u00f3w.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT\n    worker_id,\n    salary,\n    ROW_NUMBER() OVER(ORDER BY salary DESC) AS row_number\nFROM\n    sii.workers;\n<\/pre><\/div>\n\n\n<p>Wynikiem tego zapytania b\u0119d\u0105 kolejne numery nadawane rosn\u0105co, dla kolejnych pracownik\u00f3w posortowanych po wysoko\u015bci zarobk\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/2.png\"><img decoding=\"async\" width=\"764\" height=\"286\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/2.png\" alt=\"Funkcja okna Row_number\" class=\"wp-image-24196\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/2.png 764w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/2-300x112.png 300w\" sizes=\"(max-width: 764px) 100vw, 764px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 2 Funkcja okna Row_number<\/figcaption><\/figure>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>LAG\/LEAD<\/strong>: obie te funkcje dzia\u0142aj\u0105 podobnie (LEAD jest odwr\u00f3ceniem funkcji LAG), zaprezentuj\u0119 wi\u0119c przyk\u0142ad u\u017cycia na LAG. Za\u0142\u00f3\u017cmy, \u017ce w tabeli <em>revenues<\/em> trzymane s\u0105 kwartalne wyniki przychod\u00f3w firmy. Naszym celem jest pobranie danych i wskazanie w ka\u017cdym rekordzie, jaki by\u0142 wynik z poprzedniego kwarta\u0142u danego roku, oraz jaka by\u0142a zmiana wzgl\u0119dem obecnego rekordu.<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT\n    year,\n    quarter,\n    revenue,\n    LAG(revenue, 1) OVER(PARTITION BY year ORDER BY quarter) AS previous_quarter_result,\n    revenue- LAG(revenue, 1) OVER(PARTITION BY year ORDER BY quarter) AS change\nFROM\n    sii.revenues;\n<\/pre><\/div>\n\n\n<p>Wynik jaki otrzymamy:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/3.png\"><img decoding=\"async\" width=\"765\" height=\"319\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/3.png\" alt=\"Funkcja okna LAG\" class=\"wp-image-24200\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/3.png 765w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/3-300x125.png 300w\" sizes=\"(max-width: 765px) 100vw, 765px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 3 Funkcja okna LAG<\/figcaption><\/figure>\n\n\n\n<p>Jak mo\u017cna zauwa\u017cy\u0107, przy ka\u017cdym kwartale danego roku widzimy wynik z poprzedniego, a tak\u017ce to, o ile zmieni\u0142 si\u0119 przych\u00f3d wzgl\u0119dem poprzedniego kwarta\u0142u.<\/p>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>RANK<\/strong>: A co, gdyby\u015bmy z tej samej tabeli zechcieli pobra\u0107 informacje o wynikach kwartalnych z przydzielonym rankingiem w oparciu o przychody? Z pomoc\u0105 przyjdzie funkcja RANK().<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\nSELECT\n    year,\n    quarter,\n    revenue,\n    RANK() OVER(PARTITION BY year ORDER BY revenue DESC) AS q_revenue_rank\nFROM\n    sii.revenues;\n<\/pre><\/div>\n\n\n<p>Wynik zapytania:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/4.png\"><img decoding=\"async\" width=\"783\" height=\"311\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/4.png\" alt=\"Funkcja okna Rank\" class=\"wp-image-24203\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/4.png 783w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/4-300x119.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/4-768x305.png 768w\" sizes=\"(max-width: 783px) 100vw, 783px\" \/><\/a><figcaption class=\"wp-element-caption\">Ryc. 4 Funkcja okna Rank<\/figcaption><\/figure>\n\n\n\n<p>Od razu rzuca si\u0119 w oczy, \u017ce funkcja obs\u0142uguje sytuacj\u0119, gdy mamy dwie identyczne warto\u015bci, nadaj\u0105c im ten sam ranking i pomijaj\u0105c kolejn\u0105 warto\u015b\u0107. Gdyby\u015bmy nie chcieli, aby owa przerwa w numeracji si\u0119 pojawia\u0142a, zamiast funkcji <strong>RANK<\/strong> powinni\u015bmy u\u017cy\u0107 <strong>DENSE_RANK<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Inne funkcje okna<\/strong><\/h2>\n\n\n\n<ol style=\"list-style-type:1\" class=\"wp-block-list\">\n<li><strong>FIRST_VALUE<\/strong> \u2013 funkcja jest u\u017cywana do zwracania pierwszej warto\u015bci w obr\u0119bie okna wierszy. Warto\u015b\u0107 ta jest wybrana na podstawie okre\u015blonego porz\u0105dku sortowania. Jest to przydatne, gdy chcemy uzyska\u0107 pierwsz\u0105 warto\u015b\u0107 w danym zestawie w kontek\u015bcie okre\u015blonej kolejno\u015bci.<\/li>\n\n\n\n<li><strong>SUM<\/strong> \u2013 oblicza sum\u0119 warto\u015bci w obr\u0119bie okna wierszy. Dzi\u0119ki partycjonowaniu i porz\u0105dkowi mo\u017cna kontrolowa\u0107, na jakich danych funkcja ma dzia\u0142a\u0107.<\/li>\n\n\n\n<li><strong>MAX<\/strong> \u2013 oblicza maksymaln\u0105 warto\u015b\u0107 w obr\u0119bie okna wierszy. Podobnie jak w przypadku innych funkcji okna, partycjonowanie i porz\u0105dek maj\u0105 wp\u0142yw na dzia\u0142anie funkcji. Odwrotno\u015bci\u0105 tej funkcji jest funkcja <strong>MIN<\/strong>.<\/li>\n<\/ol>\n\n\n<div class=\"nsw-o-blogersii-banner\">\n            <picture>\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Desktop_.jpg\" media=\"(min-width: 992px)\" >\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Mob_.jpg\" media=\"(min-width: 300px)\" >            <img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Digital-Desktop_.jpg\" alt=\"\"  class=\"\"  >\n        <\/picture>\n        <div class=\"cnt\">\n                    <div class=\"nsw-m-title-block -h3 -invert  -has-title-margin-bottom-0 -has-title-font-weight-bold\">\n                                <h2 class=\"nsw-m-title-block__title\">Digital<\/h2>\n                <\/div>\n                            <p class=\"has-nsw-p-4-font-size has-invert-color\">\n                Zwi\u0119ksz zysk i poszerzaj grono zadowolonych klient\u00f3w dzi\u0119ki naszym us\u0142ugom in\u017cynierii oprogramowania, e-commerce, mobile i digital customer experience.\n            <\/p>\n                            <a  href=\"https:\/\/sii.pl\/oferta\/digital\/\" class=\"nsw-a-button -ghost -banner-button\"   >\n        <span>Oferta Digital<\/span>\n    <\/a>\n            <\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Podsumowanie<\/strong><\/h2>\n\n\n\n<p>Funkcje okna w SQL s\u0105 niezwykle przydatne w wielu kontekstach, <strong>szczeg\u00f3lnie w analizie danych i generowaniu bardziej zaawansowanych raport\u00f3w.<\/strong> Pozwalaj\u0105 one na wykonanie skomplikowanych operacji na zestawach wierszy w wyniku zapytania, przy zachowaniu relacji mi\u0119dzy wierszami.<\/p>\n\n\n\n<p>Gdzie warto ich u\u017cywa\u0107? Szczeg\u00f3lnie tam, gdzie wymagane jest wykonywanie skomplikowanych analiz danych, uwzgl\u0119dniaj\u0105c relacje mi\u0119dzy poszczeg\u00f3lnymi wierszami w tabeli.<\/p>\n\n\n\n<p>***<\/p>\n\n\n\n<p>Je\u015bli interesuje Ci\u0119 tematyka zwi\u0105zana z SQL, zajrzyj r\u00f3wnie\u017c <a href=\"https:\/\/sii.pl\/blog\/wyszukiwarka\/SQL\/\" target=\"_blank\" aria-label=\"do innych artyku\u0142\u00f3w naszych ekspert\u00f3w.  (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">do innych artyku\u0142\u00f3w naszych ekspert\u00f3w. <\/a><\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;24191&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;3&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Funkcje okna w j\u0119zyku SQL&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>SQL (ang. Structured Query Language) to j\u0119zyk spotykany praktycznie w wi\u0119kszo\u015bci aplikacji backendowych, niezale\u017cnie od u\u017cytej technologii. Je\u015bli projekt wymaga &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/funkcje-okna-w-jezyku-sql\/\">Continued<\/a><\/p>\n","protected":false},"author":561,"featured_media":24208,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[2427,1797,1512,513,1007],"class_list":["post-24191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-digital","tag-funkcje-okna","tag-poradnik","tag-analiza-danych","tag-sql"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2023\/09\/Funkcje-okna-w-jezyku-SQL.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/24191"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=24191"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/24191\/revisions"}],"predecessor-version":[{"id":33812,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/24191\/revisions\/33812"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/24208"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=24191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=24191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=24191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}