Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
SQL

SQL: Master Window Functions for Advanced Analytics

- 25.07.26 - ErcanOPAK

📊 Window Functions = Advanced Analytics

Aggregate queries are limiting. Window functions enable running totals, rankings, and moving averages.

📝 Window Function Basics

-- Ranking Functions
SELECT 
    product_name,
    price,
    RANK() OVER (ORDER BY price DESC) as price_rank,
    DENSE_RANK() OVER (ORDER BY price DESC) as dense_rank,
    ROW_NUMBER() OVER (ORDER BY price DESC) as row_num
FROM products;

-- Partitioned Rankings
SELECT 
    category,
    product_name,
    price,
    RANK() OVER (PARTITION BY category ORDER BY price DESC) as category_rank
FROM products;

-- Running Totals
SELECT 
    order_date,
    amount,
    SUM(amount) OVER (ORDER BY order_date) as running_total,
    AVG(amount) OVER (ORDER BY order_date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) as moving_avg
FROM orders;

-- LAG and LEAD
SELECT 
    customer_id,
    order_date,
    amount,
    LAG(amount, 1) OVER (PARTITION BY customer_id ORDER BY order_date) as previous_order,
    LEAD(amount, 1) OVER (PARTITION BY customer_id ORDER BY order_date) as next_order
FROM orders;

🎯 Advanced Window Functions

-- Percentile Calculation
SELECT 
    product_name,
    price,
    PERCENT_RANK() OVER (ORDER BY price) as percentile_rank,
    CUME_DIST() OVER (ORDER BY price) as cumulative_distribution
FROM products;

-- NTILE for Binning
SELECT 
    customer_id,
    total_spent,
    NTILE(4) OVER (ORDER BY total_spent) as quartile
FROM customer_summary;

-- First and Last Values
SELECT 
    category,
    product_name,
    price,
    FIRST_VALUE(product_name) OVER (PARTITION BY category ORDER BY price) as cheapest,
    LAST_VALUE(product_name) OVER (PARTITION BY category ORDER BY price 
        RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as most_expensive
FROM products;

-- Moving Average with Custom Window
SELECT 
    date,
    sales,
    AVG(sales) OVER (ORDER BY date ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) as seven_day_avg,
    AVG(sales) OVER (ORDER BY date ROWS BETWEEN 30 PRECEDING AND CURRENT ROW) as thirty_day_avg
FROM daily_sales;

-- Difference Between Current and Previous
SELECT 
    date,
    sales,
    sales - LAG(sales) OVER (ORDER BY date) as daily_change,
    (sales - LAG(sales) OVER (ORDER BY date)) / LAG(sales) OVER (ORDER BY date) * 100 as percent_change
FROM daily_sales;

💡 Window Function Best Practices

  • Use PARTITION BY for grouped operations
  • Use ROWS/RANGE for sliding windows
  • Combine with CTEs for complex queries
  • Index columns used in PARTITION BY
  • Test performance with large datasets

Window functions transform SQL from a query language to a full analytics platform. They’re essential for data professionals.

— Data Analyst

Related posts:

SQL: Protecting Sensitive Data with Dynamic Data Masking

DATEDIFF in WHERE Clause Disables Indexes

SQL: Performance Tuning with Query Hints

Post Views: 4

Post navigation

.NET Core: Master Configuration Management
C#: Build Immutable Data with Record Types

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

October 2026
M T W T F S S
 1234
567891011
12131415161718
19202122232425
262728293031  
« Sep    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (624)
  • Add Constraint to SQL Table to ensure email contains @ (590)
  • Average of all values in a column that are not zero in SQL (553)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (526)
  • Find numbers with more than two decimal places in SQL (468)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps
  • Photoshop: Fix a Color Profile Mismatch That Makes Printed Output Look Nothing Like What You Saw On Screen
  • WordPress: Fix Search Results That Return Pages From a Theme You Deactivated Months Ago
  • Visual Studio: Fix a Test Project That Builds Fine Alone but Fails to Discover Any Tests After a NuGet Restore
  • ASP.NET Core: Fix a File Upload That Times Out on Slow Connections Only Because Kestrel’s Minimum Data Rate Feature Kicked In
  • JavaScript: Fix an Array Destructuring Default Value That Silently Never Applies Because null Was Passed Instead of Undefined

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (973)
  • How to make theater mode the default for Youtube (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (939)
  • Get the First and Last Word from a String or Sentence in SQL (847)
  • How to select distinct rows in a datatable in C# (837)

Recent Posts

  • CSS: Fix a prefers-color-scheme Media Query That Gets Silently Overridden by a Browser Extension’s Forced Dark Mode
  • Git: Fix a Merge Commit That Silently Drops a File Because Both Branches Deleted It Differently
  • HTML5: Fix a Native Lazy-Loading Image That Never Loads Because It Sits Inside a Hidden Tab Until the User Clicks It
  • The AI Prompt That Traces a Null Reference Exception Back to the Exact Line That First Produced the Null
  • The AI Prompt That Turns a Gym Membership Contract’s Fine Print Into a Plain-English List of Cancellation Steps

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com