Hi,

I'm trying to figure out how to use BQL properly. I ran into some cases 
where I don't know what I am doing wrong:

*Properly use the WHERE clause*
*==========================*

I tried to select all lots which market value is higher than the book 
value/lot cost.

Query:
SELECT account, units(sum(position)) as units, cost_number as cost, 
cost_date as date, cost(sum(position)) as book_value, value(sum(position)) 
as market_value WHERE market_value > book_value

Error:
ERROR: Invalid column name 'market_value' in WHERE clause context.

Why is market_value (and book_value) an invalid column name? How can I use 
it in a WHERE clause?

*Selecting all lots older than 365 days:*
*==============================*

I tried to select all lots which are older than 365 days (using the lot 
date). I can't just use date as it uses the transaction date. As I 
transferred lots between accounts the transaction date differs from the lot 
date.

Query:
SELECT account, units(sum(position)) as units, cost_number as cost, 
cost_date WHERE date_diff(today(), cost_date) > 365

Exception:

Traceback (most recent call last):
  File "/usr/lib/python3.8/cmd.py", line 214, in onecmd
    func = getattr(self, 'do_' + cmd)
AttributeError: 'BQLShell' object has no attribute 'do_SELECT'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/beancount/query/shell.py", 
line 271, in run_parser
    self.dispatch(statement)
  File "/usr/local/lib/python3.8/dist-packages/beancount/query/shell.py", 
line 251, in dispatch
    return method(statement)
  File "/usr/local/lib/python3.8/dist-packages/beancount/query/shell.py", 
line 416, in on_Select
    rtypes, rrows = query_execute.execute_query(c_query,
  File 
"/usr/local/lib/python3.8/dist-packages/beancount/query/query_execute.py", 
line 317, in execute_query
    if c_where is None or c_where(context):
  File 
"/usr/local/lib/python3.8/dist-packages/beancount/query/query_compile.py", 
line 121, in __call__
    return self.operator(self.left(context), self.right(context))
TypeError: '>' not supported between instances of 'NoneType' and 'int'

*Calculate in a query*
*================*

Is it possible to calculate in a query? I'd like to calculate unrealized 
P/L in a query, if that's possible:.

Query:
SELECT account, units(sum(position)) as units, cost_number as cost, 
cost_date as date, cost(sum(position)) as book_value, value(sum(position)) 
as market_value, value(sum(position)) - cost(sum(position)) as profit_loss 
value(sum(position)) 
/ cost(sum(position)) as profit_loss_perc

*Separate the number/unit and currency of prices/lots, etc*
*===========================================*

How can I separate/split the number/unit and the currency in two columns?
I'd like an output like:

account | lot_units (Number) | lot_ccy (Currency Symbol) | book_value 
(Number) | market_value (Number) | value_ccy (Currency Symbol)

What I got so far:

account | lot_units (Number *and Currency*) | lot_ccy (Currency Symbol) | 
book_value (Number *and Currency*) | market_value (Number *and Currency*)

Query:

SELECT account, units(sum(position)) as lot_units, currency as lot_ccy, 
cost(sum(position)) as book_value, value(sum(position)) as market_value, 
cost_currency as value_ccy GROUP BY account, lot_ccy, cost_date, value_ccy 
ORDER BY account, currency, cost_date

If I try to use NUMBER() on any of the targets I get an error.

> Error: ERROR: Invalid type for argument 0 of Number: found expected .

Any help is appreciated.

Regards

-- 
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/be10e3e9-a6b2-44e2-a22e-2798473238a1n%40googlegroups.com.

Reply via email to