!- 我不是在寻找可以完成这项工作的付费软件(因为太贵了)
我们在现金管理方面存在与价值相匹配的问题。
我有两个 SQL 表,我们称之为SHOP_CASH和BANK_CASH
1) 匹配应基于 ShopName-CashAmount-Date。
2)在这里我遇到了两个问题
现金应该四舍五入到最接近的 50 英镑,理想情况下,12 400 和 12 499 应该四舍五入到 12 450,或者这只是IDEAL是基于小于 50 的现金差额的匹配,如果差额为小于 50,匹配它们,但这是如何匹配值的问题.. 这只是愚蠢的想法))???嗯……卡住了。
日期,店铺可以在几天后提现,所以需要根据提现日期(例如2018-10-26)与银行日期RANGE 2018-10-26到(+7天)2018-11-加入02
目前,我不明白在这种情况下匹配的可能方式(逻辑)。任何计算/加入的逻辑路径将不胜感激
尝试: 假设我可以按 SHOPNAME 加入两个表 - 很酷然后我将尝试按日期加入,这可能是:
SELECT * FROM SHOP_CASH AS SC
LEFT JOIN BANK_CASH AS BC
ON SC.SHOP_NAME_SC = BC.SHOP_NAME_BC
AND SC.DATE_SC = (ANY DATE FROM SC.DATE_SC TO SC.DATE_SC (+7 DAYS) = TO DATE_BC - not sure how)
AND FLOOR(SC.CASH_SC / 50) * 50 = FLOOR(BC_CASH_BC / 50) * 50
PS对于这个项目将使用谷歌大查询。
这是我的(临时解决方案)
WITH MAIN AS(SELECT
CMS.Store_name AS STORE_NAME,
CMS.Date AS SHOP_DATE,
CMB.ENTRY_DATE AS BANK_DATE,
SUM(CMS.Cash) AS STORE_CASH,
SUM(CMB.AMOUNT) AS BANK_CASH
FROM `store_data` CMS
LEFT JOIN `bank_data` AS CMB
ON CMS.store_name = CMB.STRAIGHT_LOOKUP
AND FLOOR(CMS.Cash / 50) * 50 = FLOOR(CMB.AMOUNT / 50) * 50
AND CAST(FORMAT_DATE("%F",CMB.ENTRY_DATE) AS STRING) > CAST(FORMAT_DATE("%F",CMS.Date) AS STRING)
AND CAST(FORMAT_DATE("%F",CMB.ENTRY_DATE) AS STRING) <= CAST(FORMAT_DATE("%F",DATE_ADD(CMS.Date, INTERVAL 4 day)) AS STRING)
GROUP BY STORE_NAME,SHOP_DATE,BANK_DATE)
SELECT
MAIN2.*
FROM (
SELECT
ARRAY_AGG(MAIN ORDER BY MAIN.SHOP_DATE ASC LIMIT 1)[OFFSET(0)] AS MAIN2
FROM
MAIN AS MAIN
GROUP BY MAIN.SHOP_DATE, MAIN.STORE_CASH)