T-SQL编程
我需要写一个查询来提取记录,如下所示T-SQL编程,sql,tsql,sql-server-2008-r2,Sql,Tsql,Sql Server 2008 R2,我需要写一个查询来提取记录,如下所示 membership_id, person_id, first_name last_name 昨天加入或致电的成员和未加入的成员将只有个人id 但是下面的查询正在从表中取出所有记录 SELECT dbo.pn_membership.membership_id, dbo.pn.person_id, dbo.pn.first_name, dbo.pn.surname, dbo.pn.create_datetime FROM
membership_id,
person_id,
first_name
last_name
昨天加入或致电的成员和未加入的成员将只有个人id
但是下面的查询正在从表中取出所有记录
SELECT
dbo.pn_membership.membership_id,
dbo.pn.person_id,
dbo.pn.first_name,
dbo.pn.surname,
dbo.pn.create_datetime
FROM
dbo.pn
LEFT OUTER JOIN
dbo.pn_membership
ON dbo.pn.person_id=dbo.pn_membership.person_id AND
dbo.pn.create_datetime >=getdate()-1
我只需要运行日期前一天的记录。尝试以下操作:
SELECT
dbo.pn_membership.membership_id,
dbo.pn.person_id,
dbo.pn.first_name,
dbo.pn.surname,
dbo.pn.create_datetime
FROM
dbo.pn
LEFT OUTER JOIN
dbo.pn_membership
ON dbo.pn.person_id=dbo.pn_membership.person_id
WHERE dbo.pn.create_datetime >=getdate()-1
你的问题是
- 从pn表中给我一些字段李>
- 另外,如果此人有匹配的会员记录,请告诉我 信息
- 如果他们没有给我成员资格表中的字段空值 价值观
通过将日期测试条件移动到WHERE子句,可以减少pn表中的行。通过将日期作为联接的一部分应用,您只会增加从成员资格表中获取更多空值列的可能性。您是说它提取日期为
SELECT dbo.pn_membership.membership_id, dbo.pn.person_id, dbo.pn.first_name,
dbo.pn.surname, dbo.pn.create_datetime FROM dbo.pn LEFT OUTER JOIN dbo.pn_membership ON
dbo.pn.person_id=dbo.pn_membership.person_id AND dbo.pn.create_datetime >=getdate()-1
and dbo.pn.person_id is not NULL
试试这个版本
你在问题“昨天谁加入或打电话来了”中写道但您的查询不会显示“过去24小时内有谁加入或致电”
这有点不同。另外,正如Sparky所指出的,您有这种缺陷
WHERE子句的问题。我的版本是“谁昨天加入或打过电话”。
选择
dbo.pn_membership.membership_id,
dbo.pn.person_id,
dbo.pn.first_name,
dbo.pn.姓,
dbo.pn.create_datetime
从…起
dbo.pn
左外连接
dbo.pn_成员资格
关于dbo.pn.person\u id=dbo.pn\u membership.person\u id
哪里
dbo.pn.create_datetime>=DATEADD(Day,DATEDIFF(Day,0,getdate()),-1)
和
dbo.pn.create_datetime
问题似乎就在查询的最后。不要使用和dbo.pn.create_datetime>=getdate()-1
,而是尝试使用其中dbo.pn.create_datetime>=getdate()-1
。将筛选条件作为OUTER JOIN
语句的一部分包含与使用WHERE
子句不同。另请参见。我认为他的问题在于日期逻辑位于左侧JOIN语句,而不是WHERE语句clause@Sparky正确,谢谢。我总是忘记这一点。
SELECT
dbo.pn_membership.membership_id,
dbo.pn.person_id,
dbo.pn.first_name,
dbo.pn.surname,
dbo.pn.create_datetime
FROM
dbo.pn
LEFT OUTER JOIN
dbo.pn_membership
ON dbo.pn.person_id=dbo.pn_membership.person_id
WHERE
dbo.pn.create_datetime >= DATEADD(Day, DATEDIFF(Day, 0, getdate()), -1)
AND
dbo.pn.create_datetime < DATEADD(Day, DATEDIFF(Day, 0, getdate()), 0)