How to sort a dataview list by the existence of a value

Things I have tried

I’ve scoured the information page and other posts on here and I haven’t been able to figure out how to do this simple thing.

Here’s my current query (000 Domus is my home note, ignore that):

LIST
FROM #project/active
WHERE file.name != "000 Domus"
SORT due asc

What I’m trying to do

I am trying to use a dataview query to generate a list of active projects, sorted by due date, with projects with no due date at the bottom and projects with the closest due date at the top. But when I sort by due ASC, it places files with no due date above files with the closest due date. I can’t find information on how to sort by whether there is a “due” object in the YAML frontmatter.

2 Likes

Try this trick:
SORT default(due, "") ASC

3 Likes

That did it! Thanks! Now I just need to figure out why it works :thinking:

3 Likes

To check how things work, sometimes is useful create a dataview table for tests purposes. For example, use this:

TABLE due, default(due, "") AS Test, default(due, date(2022-02-31)) AS "Test with date",  default(due, "string") AS "Test with string"
FROM #project/active
WHERE file.name != "000 Domus"
SORT default(due, "") ASC

The function default(field, value) do this: «If field is null, return value ; otherwise return field».

With the expression SORT default(due, "") ASC we do this: if due is null, return nothing (""). You can use other things: strings, etc… except dates (well, you can use dates, but then they are sorted in relation with there real dates).

If you play with the query/table above you will understand what you control as output to null values with the function default().

https://blacksmithgu.github.io/obsidian-dataview/query/functions/#defaultfield-value

5 Likes

This is crazy helpful. I’ve implemented lots of DQL from different sources without ever really understanding what I was doing or why it was working (which it often didn’t), so having a way to test functions and see what they do will be great. Thanks again!

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.