I would like to kindly ask if anyone knows how to create a table using an advance query where each row corresponds to a todo task and has additional columns for Scheduled date, deadline and priority. So, the table view of the query would be like:
Title | Status | Scheduled date | Deadline | Priority
task 1 | todo | 2021-08-08 | | A
Thanks in advance,
Fernando
I have been able to find a solution using this approach:
#+BEGIN_QUERY
{:title “Scheduled”
:query [:find (pull ?b [*])
:where
[?b :block/marker ?marker]
[?b :block/scheduled ?d]
[(!= “DONE” ?marker)]
]
:result-transform (fn [result]
(->> result
(map (fn [r] (assoc r :block/properties {“scheduled” (get r :block/scheduled)})))
)
)
:collapsed? False}
#+END_QUERY
Unfortuntately, the date format is yyyymmdd. It would be nicer to have a better format like yyyy-mm-dd HH:MM. So, if anyone has a solution for that it would be very appreciated .
In the meantime, the current solution is good enough to create arbitrary tables based on Tasks information.
Regards.
3 Likes
sotn3m
August 9, 2021, 10:15am
3
It took me a couple of minutes to figure out quotation marks needs to be adjusted…
Allow me to paste a version that can be pasted directly into logseq.
#+BEGIN_QUERY
{
:title "Scheduled"
:query [:find (pull ?b [*])
:where
[?b :block/marker ?marker]
[?b :block/scheduled ?d]
[(!= "DONE" ?marker)]
]
:result-transform (fn [result]
(->> result
(map (fn [r] (assoc r :block/properties {"scheduled" (get r :block/scheduled)})))
)
)
:collapsed? False
}
#+END_QUERY
3 Likes
sunt05
September 12, 2021, 12:55pm
4
this is brilliant! I’m quite a newbie to the query syntax and want to know how to put deadline at the beginning of a row? thanks!
Anddd7
December 28, 2021, 2:23am
5
I create 4 query to create GTD board:
DOING (just copy from tutorial example)
Scheduled
#+BEGIN_QUERY
{
:title "🍻 It's time to make it happen"
:query [
:find (pull ?h [*])
:in $ ?start ?next
:where
[?h :block/marker ?marker]
[(contains? #{"NOW" "LATER" "TODO"} ?marker)]
;; filter by scheduled or deadline
(or [?h :block/scheduled ?d] [?h :block/deadline ?d])
[(>= ?d ?start)]
[(< ?d ?next)]
]
;; in next week
:inputs [:today :7d-after]
:result-transform (fn [result]
(sort-by (fn [h]
(get h :block/priority "Z")) result))
:collapsed? false}
#+END_QUERY
Next (high priority but not hurry)
#+BEGIN_QUERY
{
:title "🏄 Nnnnnext"
:query [:find (pull ?h [*])
:where
[?h :block/marker ?marker]
[(contains? #{"NOW" "LATER" "TODO"} ?marker)]
;; double not to implement (A or B or C) = !(!A and !B and !C)
(not
(not
[?h :block/priority ?priority]
[(contains? #{"A" "B" "C"} ?priority)]
)
(not
[?h :block/ref-pages ?p]
[?p :page/name ?page-name]
[(clojure.string/includes? ?page-name "okr")]
)
)]
:result-transform (fn [result]
(sort-by (fn [h]
(get h :block/priority "Z")) result))
:collapsed? false}
#+END_QUERY
;; like Next, but use not directly
...
(not
[?h :block/priority ?priority]
[(contains? #{"A" "B" "C"} ?priority)]
)
(not
[?h :block/ref-pages ?p]
[?p :page/name ?page-name]
[(clojure.string/includes? ?page-name "okr")]
)
(not
(or [?h :block/scheduled ?d] [?h :block/deadline ?d])
[(>= ?d ?start)]
[(< ?d ?next)]
)
...
2 Likes
This is marked as a “solution” but doesn’t seem to address OP’s question directly - i.e. the output is not a table