{"id":6914,"date":"2024-01-31T00:00:00","date_gmt":"2024-01-31T05:00:00","guid":{"rendered":"https:\/\/www.sisense.com\/4-ways-to-join-only-the-first-row-in-sql\/"},"modified":"2024-09-23T15:44:58","modified_gmt":"2024-09-23T19:44:58","slug":"4-ways-to-join-only-the-first-row-in-sql","status":"publish","type":"post","link":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/","title":{"rendered":"4 Ways to join only the first row in SQL"},"content":{"rendered":"<p><em>SQL is one of the analyst&#8217;s most powerful tools. In <strong>SQL Superstar<\/strong>, we give you actionable advice to help you get the most out of this versatile language and create beautiful, effective queries.<\/em><\/p>\n<h2>One problem, many solutions<\/h2>\n<p>For today\u2019s daily report, we need a list of users and the most recent widget each user has created. We have a users table and a widgets table, and each user has many widgets.<em> users.id <\/em>is the primary key on users, and widgets.<em>user_id<\/em> is the corresponding foreign key in widgets.<\/p>\n<p>To solve this problem, we need to join <strong>only the first row<\/strong>. There are several ways to do this. Here are a few different techniques and when to use them.<\/p>\n<h2>Use correlated subqueries when the foreign key is indexed<\/h2>\n<p>Correlated subqueries are subqueries that depend on the outer query. It\u2019s like a for loop in SQL. The subquery will run once for each row in the outer query:<\/p>\n<figure class=\"wp-block-image fancybox\"><img decoding=\"async\" class=\"wp-image-74411\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/Correlated-subqueries.png\" alt=\"Correlated subqueries\" \/><\/figure>\n<h2>Use a complete subquery when you don\u2019t have indexes<\/h2>\n<p>Correlated subqueries break down when the foreign key isn\u2019t indexed, because each subquery will require a full table scan.<\/p>\n<p>In that case, we can speed things up by rewriting the query to use a single subquery, only scanning the widgets table once:<\/p>\n<pre class=\"wp-block-code\"><code>select * from users join (\r\n    select distinct on (user_id) * from widgets\r\n    order by user_id, created_at desc\r\n) as most_recent_user_widget\r\non users.id = most_recent_user_widget.user_id<\/code><\/pre>\n<p>We\u2019ve used Postgres\u2019 DISTINCT ON syntax to easily query for only one widget per user_id. If your database doesn\u2019t support something like DISTINCT ON, you have two options:<\/p>\n<h2>Use nested subqueries if you have an ordered ID column<\/h2>\n<p>In our example, the most recent row always has the highest id value. This means that even without DISTINCT ON, we can cheat with our nested subqueries like this:<\/p>\n<pre class=\"wp-block-code\"><code>select * from users join (\r\n    select * from widgets\r\n    where id in (\r\n        select max(id) from widgets group by user_id\r\n    )\r\n) as most_recent_user_widget\r\non users.id = most_recent_user_widget.user_id<\/code><\/pre>\n<p>We start by selecting the list of IDs representing the most recent widget per user. Then we filter the main widgets table to those IDs. This gets us the same result as DISTINCT ON since sorting by id and created_at happen to be equivalent.<\/p>\n<figure class=\"wp-block-image fancybox\"><img decoding=\"async\" class=\"wp-image-74416\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/Complete-subqueries.png\" alt=\"Complete subqueries\" \/><\/figure>\n<p>We\u2019ve used Postgres\u2019 DISTINCT ON syntax to easily query for only one widget per user_id. If your database doesn\u2019t support something like DISTINCT ON, you have two options:<\/p>\n<h2>Use nested subqueries if you have an ordered ID column<\/h2>\n<p>In our example, the most recent row always has the highest id value. This means that even without DISTINCT ON, we can cheat with our nested subqueries like this:<\/p>\n<pre class=\"wp-block-code\"><code>select * from users join (\r\n    select * from widgets\r\n    where id in (\r\n        select max(id) from widgets group by user_id\r\n    )\r\n) as most_recent_user_widget\r\non users.id = most_recent_user_widget.user_id<\/code><\/pre>\n<p>We start by selecting the list of IDs representing the most recent widget per user. Then we filter the main widgets table to those IDs. This gets us the same result as DISTINCT ON since sorting by id and created_at happen to be equivalent.<\/p>\n<figure class=\"wp-block-image fancybox\"><img decoding=\"async\" class=\"wp-image-74421\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/Nested-subqueries.png\" alt=\"Nested subqueries\" \/><\/figure>\n<h2>Use window functions if you need more control<\/h2>\n<p>If your table doesn\u2019t have an id column, or you can\u2019t depend on its min or max to be the most recent row, use row_number with a window function. It\u2019s a little more complicated, but a lot more flexible:<\/p>\n<pre class=\"wp-block-code\"><code>select * from users join (\r\n    select * from (\r\n        select *, row_number() over (\r\n            partition by user_id\r\n            order by created_at desc\r\n        ) as row_num\r\n        from widgets\r\n    ) as ordered_widgets\r\n    where ordered_widgets.row_num = 1\r\n) as most_recent_user_widget\r\non users.id = most_recent_user_widget.user_id\r\norder by users.id<\/code><\/pre>\n<p>The interesting part is here:<\/p>\n<pre class=\"wp-block-code\"><code>select *, row_number() over (\r\n    partition by user_id\r\n    order by created_at desc\r\n) as row_num\r\nfrom widgets<\/code><\/pre>\n<p>over (partition by user_id order by created_at desc specifies a sub-table, called a window, per user_id, and sorts those windows by created_at desc. row_number() returns a row\u2019s position within its window. Thus the first widget for each user_id will have row_number 1.<\/p>\n<p>In the outer subquery, we select only the rows with a row_number of 1. With a similar query, you could get the 2nd or 3rd or 10th rows instead.<\/p>\n<figure class=\"wp-block-image fancybox\"><img decoding=\"async\" class=\"wp-image-74428\" src=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/Window-functions.png\" alt=\"Window functions\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Joining the First Row is an oft-used technique and a vital tool in the analyst&#8217;s repertoire. Learn four different ways to pull off this essential move.<\/p>\n","protected":false},"author":4,"featured_media":7116,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[432,44,433],"tags":[472,483,484,485,486,487,488,489],"application":[46,10],"buyer-role":[56,101],"buyer-stage":[87],"department":[5,22,9,23,6,8,21,7],"industry":[177,417,25,418,423,11,471,424,420,431,425,426,427,421,428,13,38,429,430,12,422],"topic":[73],"class_list":["post-6914","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-builder-education","category-tech-talk","category-unlock-complex-data","tag-data-team","tag-sql","tag-sql-joins","tag-sql-server","tag-sql-starter-kit","tag-sql-superstar","tag-widgets","tag-window-functions","application-bi-analytics-teams","application-cloud-data-teams","buyer-role-bi-analyst","buyer-role-business-user","buyer-stage-awareness","department-customer-service","department-executive","department-finance","department-hr","department-it","department-operations","department-product","department-sales-marketing","industry-digital-marketing","industry-education","industry-enterprise","industry-finance","industry-government","industry-healthcare","industry-industrial-manufacturing","industry-insurance","industry-logistics-transportation","industry-media-entertainment","industry-nonprofit","industry-online-gaming","industry-operations-logistics","industry-other","industry-pharma-life-sciences","industry-professional-services","industry-retail","industry-software-saas","industry-supply-chain","industry-technology","industry-travel-hospitality","topic-sql-superstar"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.5 (Yoast SEO v23.8) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>4 Ways to Join Only The First Row in SQL | Sisense<\/title>\n<meta name=\"description\" content=\"Here&#039;s how to extract a list of users and their most recent widgets out of a users table and a widgets table, when each user has many widgets.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"4 Ways to join only the first row in SQL\" \/>\n<meta property=\"og:description\" content=\"Joining the First Row is an oft-used technique and a vital tool in the analyst&#039;s repertoire. Learn four different ways to pull off this essential move.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"Sisense\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-31T05:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-23T19:44:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-4-ways-to-join-blog-min.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sisense Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-4-ways-to-join-blog-min.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@sisense\" \/>\n<meta name=\"twitter:site\" content=\"@sisense\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sisense Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\"},\"author\":{\"name\":\"Sisense Team\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\"},\"headline\":\"4 Ways to join only the first row in SQL\",\"datePublished\":\"2024-01-31T05:00:00+00:00\",\"dateModified\":\"2024-09-23T19:44:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\"},\"wordCount\":587,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg\",\"keywords\":[\"data team\",\"SQL\",\"sql joins\",\"SQL Server\",\"sql starter kit\",\"sql superstar\",\"widgets\",\"window functions\"],\"articleSection\":[\"Builder Education\",\"Tech Talk\",\"Unlock Complex Data\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\",\"url\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\",\"name\":\"4 Ways to Join Only The First Row in SQL | Sisense\",\"isPartOf\":{\"@id\":\"https:\/\/www.sisense.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg\",\"datePublished\":\"2024-01-31T05:00:00+00:00\",\"dateModified\":\"2024-09-23T19:44:58+00:00\",\"description\":\"Here's how to extract a list of users and their most recent widgets out of a users table and a widgets table, when each user has many widgets.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg\",\"width\":1200,\"height\":628,\"caption\":\"featured 4 ways to join blog min\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.sisense.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"4 Ways to join only the first row in SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.sisense.com\/#website\",\"url\":\"https:\/\/www.sisense.com\/\",\"name\":\"Sisense\",\"description\":\"Build your business with anywhere-analytics\",\"publisher\":{\"@id\":\"https:\/\/www.sisense.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.sisense.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.sisense.com\/#organization\",\"name\":\"Sisense\",\"url\":\"https:\/\/www.sisense.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"contentUrl\":\"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg\",\"width\":1200,\"height\":600,\"caption\":\"Sisense\"},\"image\":{\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/sisense\",\"https:\/\/www.linkedin.com\/company\/sisense\",\"https:\/\/github.com\/sisense\/\"],\"description\":\"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users.\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115\",\"name\":\"Sisense Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.sisense.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g\",\"caption\":\"Sisense Team\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"4 Ways to Join Only The First Row in SQL | Sisense","description":"Here's how to extract a list of users and their most recent widgets out of a users table and a widgets table, when each user has many widgets.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/","og_locale":"en_US","og_type":"article","og_title":"4 Ways to join only the first row in SQL","og_description":"Joining the First Row is an oft-used technique and a vital tool in the analyst's repertoire. Learn four different ways to pull off this essential move.","og_url":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/","og_site_name":"Sisense","article_published_time":"2024-01-31T05:00:00+00:00","article_modified_time":"2024-09-23T19:44:58+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-4-ways-to-join-blog-min.jpg","type":"image\/jpeg"}],"author":"Sisense Team","twitter_card":"summary_large_image","twitter_image":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/yoast-4-ways-to-join-blog-min.jpg","twitter_creator":"@sisense","twitter_site":"@sisense","twitter_misc":{"Written by":"Sisense Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#article","isPartOf":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/"},"author":{"name":"Sisense Team","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115"},"headline":"4 Ways to join only the first row in SQL","datePublished":"2024-01-31T05:00:00+00:00","dateModified":"2024-09-23T19:44:58+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/"},"wordCount":587,"commentCount":0,"publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg","keywords":["data team","SQL","sql joins","SQL Server","sql starter kit","sql superstar","widgets","window functions"],"articleSection":["Builder Education","Tech Talk","Unlock Complex Data"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/","url":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/","name":"4 Ways to Join Only The First Row in SQL | Sisense","isPartOf":{"@id":"https:\/\/www.sisense.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg","datePublished":"2024-01-31T05:00:00+00:00","dateModified":"2024-09-23T19:44:58+00:00","description":"Here's how to extract a list of users and their most recent widgets out of a users table and a widgets table, when each user has many widgets.","breadcrumb":{"@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#primaryimage","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/2020\/01\/10160942\/featured-4-ways-to-join-blog-min.jpg","width":1200,"height":628,"caption":"featured 4 ways to join blog min"},{"@type":"BreadcrumbList","@id":"https:\/\/www.sisense.com\/blog\/4-ways-to-join-only-the-first-row-in-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sisense.com\/"},{"@type":"ListItem","position":2,"name":"4 Ways to join only the first row in SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.sisense.com\/#website","url":"https:\/\/www.sisense.com\/","name":"Sisense","description":"Build your business with anywhere-analytics","publisher":{"@id":"https:\/\/www.sisense.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sisense.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.sisense.com\/#organization","name":"Sisense","url":"https:\/\/www.sisense.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","contentUrl":"https:\/\/cdn.sisense.com\/wp-content\/uploads\/sisense-yoast-og.jpg","width":1200,"height":600,"caption":"Sisense"},"image":{"@id":"https:\/\/www.sisense.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/sisense","https:\/\/www.linkedin.com\/company\/sisense","https:\/\/github.com\/sisense\/"],"description":"Sisense accelerates product innovation through AI\/ML capabilities. Our global analytics platform lets customers drive better, faster decisions for their business and end users."},{"@type":"Person","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/e70aa3a7bbc471e4b7b8c5a7d2b36115","name":"Sisense Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.sisense.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/213e415f47bc3c7f0155a0755b1cea8c?s=96&d=mm&r=g","caption":"Sisense Team"}}]}},"_links":{"self":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/6914"}],"collection":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/comments?post=6914"}],"version-history":[{"count":0,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/posts\/6914\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media\/7116"}],"wp:attachment":[{"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/media?parent=6914"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/categories?post=6914"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/tags?post=6914"},{"taxonomy":"application","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/application?post=6914"},{"taxonomy":"buyer-role","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-role?post=6914"},{"taxonomy":"buyer-stage","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/buyer-stage?post=6914"},{"taxonomy":"department","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/department?post=6914"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/industry?post=6914"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.sisense.com\/wp-json\/wp\/v2\/topic?post=6914"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}