On 27/05/2022 13:11, Philippe Dumonet wrote:
Hey, another thing: how do I access inventories in the filter (WHERE) part of my queries? I've looked at the help provided from within the interactive query command line and there seems to be a bunch of simple functions that take an inventory as an input but I can't seem to find the relevant column. It keeps telling me "Invalid column name 'inventory' in WHERE clause context" and I can't access my own columns or use sum within the filter part.

Aggregates cannot be used in the WHERE clause as the WHERE clause is executed to filter the rows before computing the aggregates. To filter on aggregates you would need to specify an HAVING clause, but it is not implemented in bean-query as included in Beancount v2.

Working toward Beancount v3, some parts of Beancount have moved to separate projects. This is the case of bean-query, which has moved to its own repository https://github.com/beancount/beanquery/

beanquery implements the HAVING clause and the empty() BQL function that checks whether an inventory is empty, see https://github.com/beancount/beanquery/issues/36

beanquery can be installed with Beancount v2 and will replace the bean-query command with the newer version. A release has not been tagget yet, thus you would need to install from git. beanquery is evolving rapidly (at least in comparison to the time I have to dedicate to it) and the test coverage is not perfect yet, thus some bugs may sneak in. Please give it a try and report any issue you find.

You can find the example ledger file I'm experimenting with here <https://pastebin.com/LXYZ1Z05>. The query I'm running is "SELECT account, cost_date as date, sum(position) as position, cost(sum(position)) as cost, cost_number as num WHERE currency != 'EUR' GROUP BY account, currency, cost_date, cost_number". I'm trying to filter out rows which have no inventory.

I would write this like this:

  SELECT
    cost_date AS date,
    sum(position) AS position,
    cost(sum(position)) AS cost
  WHERE
    account = 'Assets:Crypto'
  GROUP BY
    currency,
    cost_date
  HAVING
    not empty(sum(position))
  ORDER BY
    date


Cheers,
Dan

--
You received this message because you are subscribed to the Google Groups 
"Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/66444718-62ec-f061-f842-90bd8775d82c%40grinta.net.

Reply via email to