📊 Dataview Query Examples

A collection of useful Dataview queries for common searches and dynamic content generation.

🎯 Basic Queries

List All Files in a Folder

LIST
FROM "FolderName"
SORT file.name ASC

Table of Recent Files

TABLE 
  dateformat(file.mtime, "yyyy-MM-dd HH:mm") AS "Modified",
  file.size AS "Size"
WHERE file.mtime > date(today) - dur(7 days)
SORT file.mtime DESC

Files by Tag

LIST
WHERE contains(file.tags, "tagname")
SORT file.name ASC

📅 Date-Based Queries

Files Created This Week

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  dateformat(file.ctime, "yyyy-MM-dd") AS "Created"
WHERE file.ctime > date(today) - dur(7 days)
SORT file.ctime DESC

Monthly Archive

TABLE WITHOUT ID
  dateformat(file.day, "MMMM yyyy") AS "Month",
  length(rows) AS "Notes"
FROM "DailyNotes"
GROUP BY dateformat(file.day, "yyyy-MM")
SORT dateformat(file.day, "yyyy-MM") DESC

Upcoming Deadlines

TABLE WITHOUT ID
  link(file.name, file.name) AS "Task",
  deadline AS "Due Date"
WHERE deadline > date(today)
SORT deadline ASC

🏷️ Tag Analysis

Tag Frequency

TABLE WITHOUT ID
  tag AS "Tag",
  length(rows) AS "Count"
FROM ""
FLATTEN file.tags AS tag
GROUP BY tag
SORT length(rows) DESC
LIST
WHERE contains(file.tags, "tag1") AND contains(file.tags, "tag2")

Files Without Tags

LIST
WHERE !file.tags OR length(file.tags) = 0

Most Linked Pages

TABLE WITHOUT ID
  link(file.name, file.name) AS "Page",
  length(file.inlinks) AS "Backlinks"
WHERE length(file.inlinks) > 0
SORT length(file.inlinks) DESC
LIMIT 10

Orphaned Pages

LIST
WHERE length(file.inlinks) = 0 AND 
      length(file.outlinks) = 0 AND
      file.name != this.file.name
TABLE WITHOUT ID
  link(file.name, file.name) AS "Page",
  length(file.inlinks) AS "In",
  length(file.outlinks) AS "Out",
  length(file.inlinks) + length(file.outlinks) AS "Total"
SORT length(file.inlinks) + length(file.outlinks) DESC
LIMIT 20

📝 Content Queries

Files with Code Blocks

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  length(filter(split(file.content, "```"), (x) => true)) - 1 AS "Code Blocks"
WHERE contains(file.content, "```")
SORT length(filter(split(file.content, "```"), (x) => true)) DESC

Search Content

LIST
WHERE contains(file.content, "search term")

Files by Word Count

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  length(split(file.content, " ")) AS "Words"
SORT length(split(file.content, " ")) DESC
LIMIT 10

✅ Task Management

All Open Tasks

TASK
WHERE !completed
GROUP BY file.name

Tasks by Priority

TABLE WITHOUT ID
  text AS "Task",
  priority AS "Priority",
  link(file.name, file.name) AS "File"
FROM ""
FLATTEN file.tasks AS task
WHERE !task.completed
SORT task.priority DESC

Task Statistics

TABLE WITHOUT ID
  file.name AS "File",
  length(filter(file.tasks, (t) => t.completed)) AS "Done",
  length(filter(file.tasks, (t) => !t.completed)) AS "Pending",
  round(length(filter(file.tasks, (t) => t.completed)) / length(file.tasks) * 100) AS "Progress %"
WHERE file.tasks

📊 Metadata Queries

Custom Frontmatter Fields

TABLE 
  status AS "Status",
  project AS "Project",
  priority AS "Priority"
WHERE status OR project OR priority

Files by Type

TABLE WITHOUT ID
  type AS "Type",
  length(rows) AS "Count"
FROM ""
WHERE type
GROUP BY type

Missing Metadata

LIST
WHERE !file.tags OR !type OR !status

🔄 Dynamic Lists

LIST
FROM 
WHERE file.name != this.file.name

Similar Tags

LIST
WHERE any(file.tags, (t) => contains(this.file.tags, t)) AND
      file.name != this.file.name

Recent History

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  dateformat(file.mtime, "yyyy-MM-dd HH:mm") AS "Modified"
WHERE file.mtime > date(today) - dur(24 hours) AND
      file.name != this.file.name
SORT file.mtime DESC

📈 Analytics Queries

Activity Heatmap Data

TABLE WITHOUT ID
  dateformat(file.mtime, "yyyy-MM-dd") AS "Date",
  length(rows) AS "Edits"
FROM ""
WHERE file.mtime > date(today) - dur(30 days)
GROUP BY dateformat(file.mtime, "yyyy-MM-dd")

Folder Statistics

TABLE WITHOUT ID
  file.folder AS "Folder",
  length(rows) AS "Files",
  sum(rows.file.size) AS "Total Size"
FROM ""
GROUP BY file.folder
SORT length(rows) DESC

Growth Over Time

TABLE WITHOUT ID
  dateformat(file.ctime, "yyyy-MM") AS "Month",
  length(rows) AS "New Files",
  length(filter(rows, (r) => r.file.ctime)) AS "Total"
FROM ""
GROUP BY dateformat(file.ctime, "yyyy-MM")
SORT dateformat(file.ctime, "yyyy-MM") ASC

🎨 Advanced Queries

Conditional Formatting

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  choice(priority = "high", "🔴 High", 
    choice(priority = "medium", "🟡 Medium", 
      choice(priority = "low", "🟢 Low", "⚪ None"))) AS "Priority"
WHERE priority

Complex Filtering

LIST
WHERE (contains(file.tags, "important") OR priority = "high") AND
      file.mtime > date(today) - dur(7 days) AND
      !completed

Calculated Fields

TABLE WITHOUT ID
  link(file.name, file.name) AS "File",
  dur(date(today) - file.ctime).days AS "Age (days)",
  round(file.size / 1024, 2) AS "Size (KB)"
SORT dur(date(today) - file.ctime).days DESC

💡 Tips for Writing Queries

Performance Optimization

  • Use LIMIT to restrict results
  • Filter early with WHERE clauses
  • Avoid complex calculations in large datasets

Common Functions

  • contains() - Check if string/array contains value
  • length() - Count items in array
  • filter() - Filter array by condition
  • dateformat() - Format dates
  • round() - Round numbers
  • choice() - Conditional logic

Query Structure

[QUERY TYPE]
[FIELDS]
FROM [SOURCE]
WHERE [CONDITIONS]
GROUP BY [GROUPING]
SORT [SORTING]
LIMIT [NUMBER]

Copy and modify these examples for your specific needs. Remember to adjust folder names, tags, and field names to match your vault structure.