我有一个库的数据库,我正在尝试编写一个查询来返回所有尚未检出五年的书籍
它应该产生这样的东西......
isbn | title | author
------+---------------------+---------------
222 | The Art of the Deal | Trump
444 | Im a cool guy | Forrest Stone
(2 rows)
我有一个books
表,
library6=# SELECT * FROM books;
isbn | title | author
------+---------------------------------------+---------------
111 | Harry Potter and the Sorcerer’s Stone | JK Rowlings
222 | The Art of the Deal | Trump
333 | to catch a crook | Robert Muller
444 | Im a cool guy | Forrest Stone
555 | rich i am | Bill Gates
(5 rows)
我有一个transactions
表,
library6=# SELECT * FROM transactions;
id | checked_out_date | checked_in_date | user_id | isbn
----+------------------+-----------------+---------+------
1 | 2016-01-01 | 2016-02-01 | 1 | 111
2 | 2016-02-02 | 2016-03-02 | 2 | 111
3 | 2016-03-03 | 2016-05-03 | 3 | 111
5 | 2017-11-29 | 2017-12-04 | 5 | 555
6 | 2017-11-28 | 2017-12-05 | 1 | 333
4 | 2017-12-06 | 2017-12-09 | 4 | 111
5 | 2010-01-01 | 2010-01-02 | 1 | 222
(7 rows)
到目前为止,我已经尝试过,它正确加入了两个表并返回了从未检出过的书,但却错过了5年前检查过的书。
library6=# SELECT b.title,b.author , b.isbn FROM transactions t
RIGHT OUTER JOIN books b ON t.isbn = b.isbn
WHERE t.isbn IS NULL;
title | author | isbn
---------------+---------------+------
Im a cool guy | Forrest Stone | 444
(1 row)
所以我接着尝试了
library6=# SELECT b.title, t.isbn FROM transactions t
RIGHT OUTER JOIN books b ON t.isbn = b.isbn
WHERE t.checked_out_date >= DATEADD(year, 5, '2017/12/09') AS DateAdd OR
t.isbn IS NULL;
ERROR: syntax error at or near "AS"
LINE 3: ...hecked_out_date >= DATEADD(year, 5, '2017/12/09') AS DateAdd...
理想情况我会使用timestamp
自动生成当前日期,但一次只能一步。
答案 0 :(得分:2)
library6=#
SELECT b.title, b.isbn,b.author ,max(t.checked_out_date)
FROM transactions t
RIGHT OUTER JOIN books b ON t.isbn = b.isbn
group by b.isbn, b.title
having max(t.checked_out_date) <= (CURRENT_DATE - INTERVAL '5
years')
PostgreSQL不提供dateadd功能
答案 1 :(得分:0)
你想要这样的东西:
<local:osmAppBarButton
ButtonState="{Binding FooBarButtonState}"
/>
我不使用postgresql,所以我不知道它等同于dateadd。