用户不能去两次相同的地方,除非6个月过去了



我是一名实习生,这是我的第一份工作,很抱歉问了这个愚蠢的问题和糟糕的英语。

CREATE SCHEMA code
CREATE TABLE code.place ( 
pk_place_id VARCHAR(8), 
place_name VARCHAR (50),
CONSTRAINT pk_place_id PRIMARY KEY (pk_place_id)
);

CREATE TABLE code.user ( 
pk_user_id VARCHAR(3), 
user_name VARCHAR (50),
CONSTRAINT pk_user_id PRIMARY KEY (pk_user_id)
);
CREATE TABLE code.visit ( 
pk_user_id VARCHAR(3), 
pk_place_id VARCHAR(8),
data DATE,
CONSTRAINT pk_user_id FOREIGN KEY (pk_user_id) REFERENCES code.user,
CONSTRAINT pk_place_id FOREIGN KEY (pk_place_id) REFERENCES code.place
);

我需要制作一个表格,显示用户可以去的地方,条件是它不显示他们在过去6个月里去过的任何地方。

老实说,我在这里很迷茫,我是一名实习生,我的主管对编码一无所知(我对此了解不多(,只是管理人员。。。

更新:

我尝试了以下代码。

SELECT *
FROM code.visit
WHERE data >= (curdate() - INTERVAL (1 - DAY(curdate()) DAY) -INTERVAL 6 MONTH;

但什么都没发生,它甚至没有说它错了,我唯一注意到的是终端看起来不像:

code=>
code->
code->

看起来像

code(>
code(>
code(>

AND在我关闭并打开终端之前,没有其他代码工作

UPDATE,它解决了它,以及关于终端的事情,我只是忘记了关闭代码(;哈哈,谢谢大家。

建议您查看文档中的所有日期/时间函数。对于这个问题,age()和区间将特别有用。

要获得用户不能去的地方id的列表:

-- get list of place id's where user CANNOT go
SELECT pk_place_id
FROM code.visit
WHERE pk_user_id = '123'
AND age(data) <= interval '6 months'

要获得用户可以去的地方的列表,您需要一个所有地方的列表减去用户不能去的地方:

SELECT place_name
FROM code.place
WHERE pk_placed_id NOT IN (SELECT pk_place_id
FROM code.visit
WHERE pk_user_id = '123'
AND age(data) <= interval '6 months')

可能有一种聪明的方法可以将这三个表组合起来,列出所有用户和他们可以去的地方,但我的SQL技能还不够好,不知道如何做到这一点。

相关内容

最新更新