SQL on FHIR, published by HL7 International / FHIR Infrastructure. This guide is not an authorized publication; it is the continuous build for version 2.1.0-pre built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/sql-on-fhir/ and changes regularly. See the Directory of published versions
| Page standards status: Informative |
<Library xmlns="http://hl7.org/fhir">
<id value="UniquePatientAddressesQuery"/>
<meta>
<profile
value="http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/SQLQuery"/>
</meta>
<text>
<status value="extensions"/>
<div xmlns="http://www.w3.org/1999/xhtml">
<div>
<table class="grid dict">
<tr>
<th scope="row"><b>Title: </b></th>
<td style="padding-left: 4px;">Unique Patient Addresses</td>
</tr>
<tr>
<th scope="row"><b>Id: </b></th>
<td style="padding-left: 4px;">UniquePatientAddressesQuery</td>
</tr>
<tr>
<th scope="row"><b>Version: </b></th>
<td style="padding-left: 4px;">2.1.0-pre</td>
</tr>
<tr>
<th scope="row"><b>Url: </b></th>
<td style="padding-left: 4px;"><a href="Library-UniquePatientAddressesQuery.html">Unique Patient Addresses</a></td>
</tr>
<tr>
<th scope="row">
<b>
</b>
</th>
<td style="padding-left: 4px;">
<p style="margin-bottom: 5px;">
<span>urn:oid:2.16.840.1.113883.4.642.40.77.28.5</span>
</p>
</td>
</tr>
<tr>
<th scope="row"><b>Type: </b></th>
<td style="padding-left: 4px;">
<p style="margin-bottom: 5px;">
<b>system: </b> <span><a href="CodeSystem-LibraryTypesCodes.html">http://hl7.org/fhir/uv/sql-on-fhir/CodeSystem/LibraryTypesCodes</a></span>
</p>
<p style="margin-bottom: 5px;">
<b>code: </b> <span>sql-query</span>
</p>
</td>
</tr>
<tr>
<th scope="row"><b>Date: </b></th>
<td style="padding-left: 4px;">2026-07-28 04:38:44+0000</td>
</tr>
<tr>
<th scope="row"><b>Publisher: </b></th>
<td style="padding-left: 4px;">HL7 International / FHIR Infrastructure</td>
</tr>
<tr>
<th scope="row"><b>Description: </b></th>
<td style="padding-left: 4px;"><div><p>Retrieves each patient's most recent address in a given city. Includes two
dialects for the same logical query.</p>
<p><strong>Standard SQL:</strong></p>
<pre><code class="language-sql">WITH ranked_addresses AS (
SELECT
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code,
patient_address_view.updated_at,
ROW_NUMBER() OVER (
PARTITION BY patient_view.id
ORDER BY patient_address_view.updated_at DESC, patient_address_view.address_id DESC
) AS address_rank
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
)
SELECT
patient_id,
name,
address_line1,
city,
state,
postal_code
FROM ranked_addresses
WHERE address_rank = 1
</code></pre>
<p><strong>PostgreSQL dialect:</strong></p>
<pre><code class="language-sql">SELECT DISTINCT ON (patient_view.id)
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
ORDER BY patient_view.id, patient_address_view.updated_at DESC, patient_address_view.address_id DESC
</code></pre>
</div></td>
</tr>
<tr>
<th scope="row"><b>Jurisdiction: </b></th>
<td style="padding-left: 4px;">001</td>
</tr>
<tr>
<th scope="row"><b>Related Artifacts: </b></th>
<td style="padding-left: 4px;">
<p><b>Dependencies</b></p>
<ul>
<li><code>https://example.org/ViewDefinition/patient_view</code></li>
<li><code>https://example.org/ViewDefinition/patient_address_view</code></li>
</ul>
</td>
</tr>
<tr>
<th scope="row"><b>Parameters: </b></th>
<td style="padding-left: 4px;">
<table class="grid-dict">
<tr><th><b>Name</b></th><th><b>Type</b></th><th><b>Min</b></th><th><b>Max</b></th><th><b>In/Out</b></th></tr>
<tr><th>city</th><th>string</th><th/><th/><th>In</th></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/sql</th></tr>
<tr><td><pre><code>Encoded data (1000 characters)</code></pre></td></tr>
</table>
</td>
</tr>
<tr>
<td colspan="2">
<table>
<tr><th><b>Content: </b> application/sql;dialect=postgresql</th></tr>
<tr><td><pre><code>Encoded data (660 characters)</code></pre></td></tr>
</table>
</td>
</tr>
</table>
</div>
</div>
</text>
<url
value="http://hl7.org/fhir/uv/sql-on-fhir/Library/UniquePatientAddressesQuery"/>
<identifier>
<system value="urn:ietf:rfc:3986"/>
<value value="urn:oid:2.16.840.1.113883.4.642.40.77.28.5"/>
</identifier>
<version value="2.1.0-pre"/>
<name value="UniquePatientAddressesQuery"/>
<title value="Unique Patient Addresses"/>
<status value="active"/>
<type>
<coding>
<system
value="http://hl7.org/fhir/uv/sql-on-fhir/CodeSystem/LibraryTypesCodes"/>
<code value="sql-query"/>
</coding>
</type>
<date value="2026-07-28T04:38:44+00:00"/>
<publisher value="HL7 International / FHIR Infrastructure"/>
<contact>
<name value="HL7 International / FHIR Infrastructure"/>
<telecom>
<system value="url"/>
<value value="http://www.hl7.org/Special/committees/fiwg"/>
</telecom>
</contact>
<description
value="Retrieves each patient's most recent address in a given city. Includes two
dialects for the same logical query.
**Standard SQL:**
```sql
WITH ranked_addresses AS (
SELECT
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code,
patient_address_view.updated_at,
ROW_NUMBER() OVER (
PARTITION BY patient_view.id
ORDER BY patient_address_view.updated_at DESC, patient_address_view.address_id DESC
) AS address_rank
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
)
SELECT
patient_id,
name,
address_line1,
city,
state,
postal_code
FROM ranked_addresses
WHERE address_rank = 1
```
**PostgreSQL dialect:**
```sql
SELECT DISTINCT ON (patient_view.id)
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
ORDER BY patient_view.id, patient_address_view.updated_at DESC, patient_address_view.address_id DESC
```"/>
<jurisdiction>
<coding>
<system value="http://unstats.un.org/unsd/methods/m49/m49.htm"/>
<code value="001"/>
<display value="World"/>
</coding>
</jurisdiction>
<relatedArtifact>
<type value="depends-on"/>
<label value="patient_view"/>
<resource value="https://example.org/ViewDefinition/patient_view"/>
</relatedArtifact>
<relatedArtifact>
<type value="depends-on"/>
<label value="patient_address_view"/>
<resource
value="https://example.org/ViewDefinition/patient_address_view"/>
</relatedArtifact>
<parameter>
<name value="city"/>
<use value="in"/>
<documentation value="City to filter addresses"/>
<type value="string"/>
</parameter>
<content>
<extension
url="http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/sql-text">
<valueString
value="WITH ranked_addresses AS (
SELECT
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code,
patient_address_view.updated_at,
ROW_NUMBER() OVER (
PARTITION BY patient_view.id
ORDER BY patient_address_view.updated_at DESC, patient_address_view.address_id DESC
) AS address_rank
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
)
SELECT
patient_id,
name,
address_line1,
city,
state,
postal_code
FROM ranked_addresses
WHERE address_rank = 1"/>
</extension>
<contentType value="application/sql"/>
<data
value="V0lUSCByYW5rZWRfYWRkcmVzc2VzIEFTICgKICBTRUxFQ1QKICAgIHBhdGllbnRfdmlldy5pZCBBUyBwYXRpZW50X2lkLAogICAgcGF0aWVudF92aWV3Lm5hbWUsCiAgICBwYXRpZW50X2FkZHJlc3Nfdmlldy5hZGRyZXNzX2xpbmUxLAogICAgcGF0aWVudF9hZGRyZXNzX3ZpZXcuY2l0eSwKICAgIHBhdGllbnRfYWRkcmVzc192aWV3LnN0YXRlLAogICAgcGF0aWVudF9hZGRyZXNzX3ZpZXcucG9zdGFsX2NvZGUsCiAgICBwYXRpZW50X2FkZHJlc3Nfdmlldy51cGRhdGVkX2F0LAogICAgUk9XX05VTUJFUigpIE9WRVIgKAogICAgICBQQVJUSVRJT04gQlkgcGF0aWVudF92aWV3LmlkCiAgICAgIE9SREVSIEJZIHBhdGllbnRfYWRkcmVzc192aWV3LnVwZGF0ZWRfYXQgREVTQywgcGF0aWVudF9hZGRyZXNzX3ZpZXcuYWRkcmVzc19pZCBERVNDCiAgICApIEFTIGFkZHJlc3NfcmFuawogIEZST00gcGF0aWVudF92aWV3CiAgSk9JTiBwYXRpZW50X2FkZHJlc3NfdmlldwogICAgT04gcGF0aWVudF92aWV3LmlkID0gcGF0aWVudF9hZGRyZXNzX3ZpZXcucGF0aWVudF9pZAogIFdIRVJFIHBhdGllbnRfdmlldy5hY3RpdmUgPSB0cnVlCiAgICBBTkQgcGF0aWVudF9hZGRyZXNzX3ZpZXcuY2l0eSA9IDpjaXR5CikKU0VMRUNUCiAgcGF0aWVudF9pZCwKICBuYW1lLAogIGFkZHJlc3NfbGluZTEsCiAgY2l0eSwKICBzdGF0ZSwKICBwb3N0YWxfY29kZQpGUk9NIHJhbmtlZF9hZGRyZXNzZXMKV0hFUkUgYWRkcmVzc19yYW5rID0gMQ=="/>
</content>
<content>
<extension
url="http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/sql-text">
<valueString
value="SELECT DISTINCT ON (patient_view.id)
patient_view.id AS patient_id,
patient_view.name,
patient_address_view.address_line1,
patient_address_view.city,
patient_address_view.state,
patient_address_view.postal_code
FROM patient_view
JOIN patient_address_view
ON patient_view.id = patient_address_view.patient_id
WHERE patient_view.active = true
AND patient_address_view.city = :city
ORDER BY patient_view.id, patient_address_view.updated_at DESC, patient_address_view.address_id DESC"/>
</extension>
<contentType value="application/sql;dialect=postgresql"/>
<data
value="U0VMRUNUIERJU1RJTkNUIE9OIChwYXRpZW50X3ZpZXcuaWQpCiAgcGF0aWVudF92aWV3LmlkIEFTIHBhdGllbnRfaWQsCiAgcGF0aWVudF92aWV3Lm5hbWUsCiAgcGF0aWVudF9hZGRyZXNzX3ZpZXcuYWRkcmVzc19saW5lMSwKICBwYXRpZW50X2FkZHJlc3Nfdmlldy5jaXR5LAogIHBhdGllbnRfYWRkcmVzc192aWV3LnN0YXRlLAogIHBhdGllbnRfYWRkcmVzc192aWV3LnBvc3RhbF9jb2RlCkZST00gcGF0aWVudF92aWV3CkpPSU4gcGF0aWVudF9hZGRyZXNzX3ZpZXcKICBPTiBwYXRpZW50X3ZpZXcuaWQgPSBwYXRpZW50X2FkZHJlc3Nfdmlldy5wYXRpZW50X2lkCldIRVJFIHBhdGllbnRfdmlldy5hY3RpdmUgPSB0cnVlCiAgQU5EIHBhdGllbnRfYWRkcmVzc192aWV3LmNpdHkgPSA6Y2l0eQpPUkRFUiBCWSBwYXRpZW50X3ZpZXcuaWQsIHBhdGllbnRfYWRkcmVzc192aWV3LnVwZGF0ZWRfYXQgREVTQywgcGF0aWVudF9hZGRyZXNzX3ZpZXcuYWRkcmVzc19pZCBERVND"/>
</content>
</Library>