Sql 有没有办法显示每周丢失多少本书?

Sql 有没有办法显示每周丢失多少本书?,sql,postgresql,Sql,Postgresql,我有一个图书馆管理系统的数据库。我必须显示每周借阅、归还和丢失的图书数量(有任何信息的周数)。如果书在7天内未归还,则视为迟交。如果这本书没有在预期的一周内归还,则视为该周内丢失。结果应该是这样的 Week | Borrowed | Returned | Missing -----+----------+----------+--------- 4 | 10 | 8 | 2 5 | 5 | 4 | 3 week | year

我有一个图书馆管理系统的数据库。我必须显示每周借阅、归还和丢失的图书数量(有任何信息的周数)。如果书在7天内未归还,则视为迟交。如果这本书没有在预期的一周内归还,则视为该周内丢失。结果应该是这样的

Week | Borrowed | Returned | Missing
-----+----------+----------+---------
4    | 10       | 8        | 2
5    | 5        | 4        | 3
 week | year | borrowed | returned | missing
------+------+----------+----------+---------
   45 | 2018 |        1 |          |
   46 | 2018 |          |        1 |
   51 | 2018 |        1 |          |
   52 | 2018 |          |        1 |
    5 | 2019 |        3 |          |
    6 | 2019 |        4 |          |
    7 | 2019 |        5 |          |
    7 | 2019 |          |        9 |
    8 | 2019 |          |        3 |
   14 | 2019 |        1 |          |
   17 | 2019 |          |        1 |
   36 | 2019 |        1 |          |
   37 | 2019 |        7 |          |
   38 | 2019 |        2 |          |
      |      |          |        0 |
我用这个算出了借还的部分

select date_part('week', dateofborrowing) as week,
date_part('year', dateofborrowing) as year, 
count(dateofborrowing) as borrowed, 
null as returned,
null as missing
from borrowing 
group by year,week 
union 
select date_part('week', returndate) as week,
date_part('year', returndate) as year, 
null as borrowed,
count(returndate) as returned,
null as missing
from borrowing 
group by year, week
order by year, week;
返回看起来像这样

Week | Borrowed | Returned | Missing
-----+----------+----------+---------
4    | 10       | 8        | 2
5    | 5        | 4        | 3
 week | year | borrowed | returned | missing
------+------+----------+----------+---------
   45 | 2018 |        1 |          |
   46 | 2018 |          |        1 |
   51 | 2018 |        1 |          |
   52 | 2018 |          |        1 |
    5 | 2019 |        3 |          |
    6 | 2019 |        4 |          |
    7 | 2019 |        5 |          |
    7 | 2019 |          |        9 |
    8 | 2019 |          |        3 |
   14 | 2019 |        1 |          |
   17 | 2019 |          |        1 |
   36 | 2019 |        1 |          |
   37 | 2019 |        7 |          |
   38 | 2019 |        2 |          |
      |      |          |        0 |
如果有快速解决方案,第7周最好在同一行

然而,我正在挣扎的是缺少的专栏。 谢谢你的帮助

这是表借用的创建

CREATE TABLE Borrowing (
BorrowingID int PRIMARY KEY,
ResourceID int REFERENCES Books(ResourceID),
UserID int REFERENCES Usser(UserID),
DateOfBorrowing date,
ReturnDate date,
Delay int );    // total amount of days a book is delayed
一些数据

INSERT INTO borrowing (borrowingid, resourceid, userid, dateofborrowing, returndate, delay)
VALUES (1, 117, 28, '2018-11-11', '2018-11-15', 0),
(2, 118, 30, '2018-12-22', '2018-12-29', 0),
(3, 119, 37, '2019-02-02', '2019-02-12', 3),
(4, 120, 37, '2019-02-02', '2019-02-14', 5),
(5, 121, 11, '2019-04-03', '2019-04-25', 15),
(6, 122, 32, '2019-02-03', '2019-02-11', 1),
(7, 123, 34, '2019-02-05', '2019-02-19', 7),
(8, 124, 39, '2019-02-08', '2019-02-14', 0),
(9, 125, 39, '2019-02-09', '2019-02-14', 0),
(10, 126, 39, '2019-02-10', '2019-02-14', 0),
(11, 127, 15, '2019-02-12', '2019-02-15', 0),
(12, 128, 16, '2019-02-12', '2019-02-16', 0),
(13, 129, 17, '2019-02-13', '2019-02-16', 0),
(14, 130, 18, '2019-02-14', '2019-02-20', 0),
(15, 131, 32, '2019-02-15', '2019-02-20', 0);

您可能会使用
sum(当Delay>=7然后是1 END时)作为缺少的
或类似的内容


有关更多详细信息,请参阅。

发布
借用表的结构,以便我们知道查询在操作什么,最好是一些示例数据(db fiddle或类似数据),@404希望帮助显示您是否定义了一本书是否“丢失”?@404哦,是的,忘了这一点,如果书在7天内没有归还,那就晚了。因此,如果这本书在预期的一周内没有归还,它就不见了